【问题标题】:Repopulating Rails form for an array of objects为对象数组重新填充 Rails 表单
【发布时间】: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


    【解决方案1】:

    我通过重构表单以表示单个对象模型来解决这个问题,该模型接受用户的嵌套属性(如我在问题 [here] 中发布的链接中所建议的那样)。我最终在我的数据库中得到了一个额外的模型(以及用于控制器/视图的额外文件),但控制器代码更加简洁,我能够更多地使用 rails 魔法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-15
      • 2013-03-10
      • 2015-08-15
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 2012-12-20
      • 2021-09-22
      相关资源
      最近更新 更多