【发布时间】:2014-06-27 20:54:25
【问题描述】:
我想使用一个表单创建多个用户对象。我有一个看起来像这样的表格:
= form_for @users, :url => "batch_add" do |f|
- @users.each_with_index do |user, index|
= fields_for "I-DONT-KNOW WHAT-GOES-HERE" do |u|
= render :partial => "user_fields", :locals => {:i => index}
我的用户控制器中有两种方法,如下所示。第一个方法(batch_add_new)在表单首次加载(GET)时调用,第二个方法(batch_add_create)在表单提交(POST)时调用。
def batch_add_new
@users = [User.new]
end
def batch_add_create
@users = []
i = 0
while(!params["user_" + i.to_s].nil?)
u = User.new(params["user_" + i.to_s])
@users << u
i = i + 1
end
end
if @users.all?(&:valid?)
@users.all?(&:save)
flash[:notice] = "Users have been sucessfully created!"
redirect_to "/some/path"
else
render :batch_add_new
end
当我提交表单时,我得到这样的参数(如果我尝试添加两个用户):
{...,"user_0"=>{"role_id"=>"1","name"=>"X"},
"user_1"={"role_id"=>"2","name"=>"Y"}, ...}
我应该将什么传递给 fields_for 以使该表单能够正常工作并且字段将在验证失败时重新填充?我尝试按照Multiple objects in a Rails form 中的建议传入users[], user,但似乎无法正确使用语法。
【问题讨论】:
标签: ruby-on-rails forms form-for