2012-08-06 50 views
0

我有兩個模型,Designer和Influence。 他們對彼此有一個「has_many」關係:通過一個稱爲Relation的連接模型。在has_many中更新模型:通過關聯

我想用單個表單來創建/更新來自影響模型的信息的設計器模型。是否可以通過設計器控制器中的創建/更新操作創建關係對象?或者我需要創建一個關係控制器?

我的當前代碼如下,並在DesignersController#Update中導致NoMethodError。

Designer.rb

attr_accessible :name, :relation, :influence 
has_many :relations 
has_many :influences, :through => relations 

Influence.rb

attr_accessible :name, :relation, :designer 
has_many :relations 
has_many :designers, :through => :relations 

Relation.rb

attr_accessible :designer_id, :influence_id 
belongs_to :designer 
belongs_to :influence 

名設計師/ _form.html.erb

<%= form_for @designer do |f| %> 

    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 

    <%= f.label :influence %><br /> 
    <%= f.collection_select :influence, Influence.order(:name), :id, :name, include_blank: true %> 

    <%= f.submit %> 

<% end %> 

designers_controller.rb

def update 
    @designer = current_designer 
    ** Is there a way to create a new relation object here? ** 

回答

1

有2點通用的方式來做到這一點。您可以創建一個關係直接對象,或者您可以使用設計師協會創建一個影響對象,系統將自動做出:

Relation.create relation_attributes

@designer.influences.create influence_attributes(這將創建一個新的關聯對象)

+0

謝謝@ jordanpg。我會選擇第一個,因爲我不想創造任何新的影響,但是想通過新的關係向現有和新設計師添加現有的影響力。對於第一個示例,如何從設計器表單中的collection_select輸入引用influence_id?我在我的設計者控制器中添加了以下內容到我的更新方法中。
Relation.create(designer_id:current_designer.id,influence_id :: influence_id)
這種說法不正確嗎? – umezo 2012-08-06 21:44:53

+0

在'collection_select'語句中,您已經引用了'influence_id':'Influence.order(:name),:id,:name'。例如,如果您想引用與@designer對象關聯的'influence_id',請執行:'f.object.influences.first'。另外,如果你對此感到滿意,不要忘記接受答案。 – jordanpg 2012-08-06 21:52:57

+0

嗨@jordanpg,我會盡快接受該工作。對於新手問題抱歉...對於第一種選擇,定義「關係屬性」的最佳方法是什麼?除了向designers_controller中的update方法添加「Relation.create relation_attributes」之外,我保留了所有文件不變。這給了我「未定義的局部變量或方法'relation_attributes'」。你能幫我理解我在哪裏以及如何定義這個? – umezo 2012-08-06 22:12:38

相關問題