2011-10-06 57 views
2

我在rails 3.1中。我有以下型號我該如何在rails中處理這種類型的多級表單

class Tool < ActiveRecord::Base 
     has_many :comments 
    end 

    class Comment < ActiveRecord::Base 
     belongs_to :tool 
     has_many :relationships 
     has_many :advantages, :through => :relationships, :source => :resource, :source_type => 'Advantage' 
     has_many :disadvantages, :through => :relationships, :source => :resource, :source_type => 'Disadvantage' 

    end 

    class Relationship < ActiveRecord::Base 
     belongs_to :comment 
     belongs_to :resource, :polymorphic => true 
    end 

    class Disadvantage < ActiveRecord::Base 
     has_many :relationships, :as => :resource 
     has_many :comments, :through => :relationships 
    end 

    class Advantage < ActiveRecord::Base 
     has_many :relationships, :as => :resource 
     has_many :comments, :through => :relationships 
    end 

總之,A Tool有許多comments。 A Comment inturn與AdvantagesDisadvantages相關聯。因此,在我的tool/show頁面中,我將列出所有評論。

但是,如果我必須添加註釋到工具頁面,將會有一個表單,其中有一個textarea的評論和兩個multi select list boxes的優點和缺點。

這裏有一個問題,如果用戶想從現有的adv/disadvantagev中選擇,用戶可以從列表框中選擇,或者如果用戶想要添加一個新的副/他可以鍵入並添加它,以便通過ajax調用保存並將新的副/副列表添加到列表框中。我該如何做到這一點?

回答

5

您要找的是什麼「嵌套表格」 - 它們非常簡單易用。

在你的Gemfile添加:在您的MAIN_MODEL

gem "nested_form" 

1),你會包括在視圖accepts_nested_attributes_for :nested_model

class MainModel 
    accepts_nested_attributes_for :nested_model 
end 

2)調用你MAIN_MODEL代替的form_for(),你會在頂部調用nested_form_for()

= nested_form_for(@main_model) do |f| 
    ... 

檢查該方法的Rails頁面,它有一些有趣的選項,例如:reject_if,:allow_destroy,...

3)爲MAIN_MODEL,當你想展示一個子表單的嵌套模型來看,你會做

= f.fields_for :nested_model # replace with your other model name 

會那麼只需使用_form部分作爲nested_model並將其嵌入視圖中,以便像魅力一樣工作main_model

作品!

檢查這些RailsCast.com集,涵蓋嵌套形式深度:

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

希望這有助於

+1

我要提及nested_form是寶石 – maxenglander

+0

好點!謝謝! – Tilo

相關問題