0

我正在建立一个:has_many :through关系表格:

class Account < ActiveRecord::Base
  has_many :employments
  has_many :people, :through => :employments
  accepts_nested_attributes_for :employments
end

class Person < ActiveRecord::Base
  has_many :employments
  has_many :accounts, :through => :employments
end

class Employment < ActiveRecord::Base
  belongs_to :account
  belongs_to :person
end

Employment模型包含字段:account_id:person_id

在帐户表单中,我添加:

<% fields_for 'account[employments_attributes][]', @account.employments do |e| %>
  <%= e.hidden_field :account_id, :value => @account.id %>
  <%= e.collection_select :person_id, Person.all, :id, :name %>
<% end %>

collection_select,或者select同样,在我给他们的任何排列中,都会因 NoMethodError 异常而失败:

undefined method `person_id' for #<Array:0x82e7db0>

就好像该person_id字段不存在,但我可以调用 create 方法:account_id并且:person_id非常好。

4

1 回答 1

2

回答我自己的问题。当我训练我的大脑以 Rails 的方式思考时,我一直在遇到这样的情况,我只是在错误地思考问题。

forms_for需要对控制器中已经实例化的对象进行操作。这不是创建就业对象的表单,而是填写空字段中的字段。所以,我需要在edit操作中创建一个空的就业对象:

@account.employments.build

用正确的逻辑封装,所以它只在我需要的时候被创建。

于 2009-09-29T05:32:37.063 回答