簡體   English   中英

重新填充對象數組的Rails表單

[英]Repopulating Rails form for an array of objects

我想使用一種形式創建多個用戶對象。 我有一個看起來像這樣的表格:

= 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}

我的用戶控制器中有兩種方法,如下所示。 第一次加載表單(GET)時將調用第一種方法(batch_add_new),而提交表單(POST)時將調用第二種方法(batch_add_create)。

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中,以便此表單可以正常工作,並且在驗證失敗時可以重新填充字段? 我曾嘗試按照Rails表單的“多個對象”中的建議傳入users[], user但似乎語法不正確。

我通過重構表單來表示一個對象模型來解決此問題,該對象模型接受用戶的嵌套屬性(如我在問題[ here ]中發布的鏈接中所建議)。 我最終在數據庫中有了一個額外的模型(以及用於控制器/視圖的額外文件),但是控制器代碼更加簡潔,而且我可以更多地使用rails magic。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM