在has_many中更新模型:通过关联

时间:2012-08-06 20:21:57

标签: ruby-on-rails model has-many-through

我有两个模特,设计师和影响力。 它们彼此之间存在“has_many”关系:通过名为Relation的连接模型。

我想使用单个表单来创建/更新设计器模型,其中包含来自影响模型的信息。是否可以通过设计器控制器中的创建/更新操作创建关系对象?或者我需要创建一个关系控制器吗?

我当前的代码如下,并在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 个答案:

答案 0 :(得分:1)

有两种通用方法可以做到这一点。您可以直接创建一个Relations对象,也可以使用Designer关联创建一个Influence对象,其中一个将自动生成:

Relation.create relation_attributes

@designer.influences.create influence_attributes(这会创建一个新的Relation对象)