2011-12-05 35 views
2

我正在研究Rails表單,它將允許用戶通過一次提交來編輯一個類的許多對象的屬性。我最初的本能是創建一個外部form_for塊,然後使用fields_for遍歷其中的項目。在一個Rails表單中編輯單個類的多個對象的最佳方法是什麼?

但是,沒有一個對象與表單將要修改的對象有一對多關係,所以在我看來,沒有任何對象可以正確傳遞到form_for

在任何情況下,我想看到的是一個表單的例子,它可以同時修改多個對象而不會吸引「父」對象。也許這將涉及form_tag

(注:我在工作HAML,所以在HAML答案將是真棒,雖然不必要)

回答

4

好,有父對象會更容易。

對於許多對象的批量更新,關鍵是要使用正確的輸入名稱,以便軌道將解析PARAMS作爲陣列,即

@posts.each do |post| 
    fields_for "posts[#{post.id}]", post do |p| 
    p.text_field :name 
    p.hidden_field :id 
    end 
end 

看看生成的HTML源代碼,看看有什麼文本輸入獲取的名稱屬性。如果這樣做是正確的,params [:posts]現在將成爲控制器中的一個哈希值,然後您可以更新它。

http://railscasts.com/episodes/165-edit-multiple應該是相關的太

+0

感謝您的回覆。我沒有意識到'fields_for'不需要一個對象作爲參數。與此同時,我到達了我自己的解決方案,到目前爲止似乎工作。我會在下面發佈。 – hoffm

0

有一些額外的技巧,以我的實際情況,但這裏的一些僞代碼,我希望將說明我採取的方法:

= form_tag url_for(:controller => "the_controller", 
        :action => "update") do 
    @objects_to_be_updated.each do |object| 
     = check_box_tag "[desired_path][through_the][parameters_hash]", true, object.boolean_attibute 
     = text_field_tag "[another_path][through_the][parameters_hash]", object.text_attribute 
    end 
end 

等。

使用_tag使用表單助手的變體(不需要與活動記錄模型關聯)有點痛苦,但似乎也讓您更好地控制結果參數的結構。

+0

是的,你的代碼也可以。 –

相關問題