存储在activerecord中的映射表中的元数据的多对多关系

时间:2012-03-29 18:22:15

标签: ruby-on-rails-3 activerecord many-to-many

通过第三个表,我有两个表有多对多关系的表。在第三个表中是我在构建两个表之间的关系时需要分配的一段数据,我如何使用ActiveRecords构建方法来分配它?

以下是显示我的意思的代码:

class Company < Contact

  has_many :contact_companies
  has_many :people, :through => :contact_companies
  accepts_nested_attributes_for :people, :allow_destroy => true
  accepts_nested_attributes_for :contact_companies

end


class Person < Contact

  has_many :contact_companies
  has_many :companies, :through => :contact_companies
  accepts_nested_attributes_for :companies, :allow_destroy => true
  accepts_nested_attributes_for :contact_companies
end


class ContactCompany < ActiveRecord::Base
  belongs_to :person
  belongs_to :company
end

ContactCompany包含一个名为“position”的数据成员。我想做的是:

c = Person.new
c.companies.build(:name => Faker::Company.name, :position => positions.sample)

编辑:

当我尝试上面的代码时,我得到“未知属性:位置”。

1 个答案:

答案 0 :(得分:1)

c.companies.build行正在尝试构建一个Company对象,该对象没有position属性(ContactCompany),因此出错。看起来您正在尝试在两个不同的模型上设置属性,因此您必须确保在正确的模型上设置适当的属性:

# you can chain these calls but I separated them for readability
cc = c.contact_companies.build(:position => positions.sample)
cc.build_company(:name => Faker::Company.name)