如何向关联添加其他属性?

时间:2013-09-11 12:38:28

标签: ruby-on-rails ruby associations has-many

我有一个协会:

class ParentChild < ActiveRecord::Base
  attr_accessible :parent_id, child_id, position

  belongs_to class2, :foreign_key => "child_id"
end


class Parent< ActiveRecord::Base

  has_many parent_child
  has_many Parent, through: :parent_child
end

它可以创建父级并关联另一个父级:

Parent.create.parents << Parent.create

但是可以设置一个额外的属性,在这种情况下是ParentChild模型中的position属性吗?

这样的事情:

parent.parents << Parent.create, 3

2 个答案:

答案 0 :(得分:0)

您可以直接创建ParentChild记录:

grand_parent = Parent.create

relationship = ParentChild.create(
                 parent_id: grand_parent.id, 
                 child_id:  parent.id, 
                 position:  3
               )

答案 1 :(得分:0)

如果你想在写作时使它工作,你需要使用关系扩展:

has_many :parents, :through => :parent_child do
  def << (parent_object, position)
    proxy_association.owner.parent_child.create(:child_id => parent_object.id, :position => position)
  end

  alias :add, :<<
end