[英]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.