是否可以在引用同一模型的活动记录中拥有并属于许多关系?
我想模仿兄弟类型的关系。
class Child < ActiveRecord::Base
has_and_belongs_to_many :siblings
end
到目前为止,我已经创建了一个兄弟链接表:
class CreateSiblings < ActiveRecord::Migration
def change
create_table :siblings do |t|
t.integer :child1_id
t.integer :child2_id
t.timestamps
end
end
end
但是我担心这会导致我编写丑陋的代码以获得实际的实例:
siblings = []
child1.siblings.each do |s|
siblings << s.child2
end
我更愿意通过写作来获得一系列孩子:
child1.siblings
我想知道我的链接表和模型关联应该如何支持这个?
感觉我错过了一些非常明显的东西。
我在Rails 3.1上。谢谢你的帮助!
答案 0 :(得分:4)
方法1:
我只想添加一个名为parent_id
的列。
然后我会在模型上创建一个实例方法,例如:
def children
Model.where({ parent_id: id })
end
如果您想要父母,您可以执行以下操作:
def parent
Model.where({ id: parent_id }).first
end
然后你可以像这样收集兄弟姐妹:
def siblings
parent.children.reject{ |r| r == self }
end
方法2:
您还可以尝试使用belongs_to
关系,例如:
belongs_to :parent, class_name: "Model", foreign_key: :parent_id
但我并不是百分之百确定这种方法。在它工作之前你可能需要稍微调整一下。
我希望它有所帮助:)
\\ Emil