如何在与自身关联的Ruby on Rails模型中声明关联?

时间:2013-03-29 11:05:51

标签: ruby-on-rails associations model-associations

在我的Ruby on Rails应用程序中,我有一个带有father_id属性的Idea模型。 模型定义声明了以下关联:

class Idea < ActiveRecord::Base
    belongs_to :father, :class_name => "Idea", :foreign_key => "idea_id"
    has_many :children, :class_name => "Idea", :foreign_key => "father_id", :dependent => :destroy

我认为我弄错了,因为当我使用rails控制台时,我可以召唤一个想法的孩子而不是它的父亲。例如:

irb(main):008:0> i = Idea.find(75)
=> #<Idea id: 75, father_id: 66>

irb(main):009:0> i.children
=> [#<Idea id: 98, father_id: 75>, #<Idea id: 99, father_id: 75>]

这意味着通过协会调用孩子可以正常工作。 但是打电话给父亲会返回nil:

irb(main):010:0> i.father
=> nil

虽然有一个id = 66的想法。

我显然不确定在将模型链接到自身的关联中使用:foreign_key的正确方法。有人请有提示吗?

2 个答案:

答案 0 :(得分:0)

摆脱:foreign_key => "idea_id"上的belongs_to

belongs_to :father, :class_name => "Idea"
has_many :children, :class_name => "Idea", :foreign_key => "father_id", :dependent => :destroy

(您可以将其更改为"father_id",这是您想要的,但这是默认设置,因此实际上无需指定它。)

答案 1 :(得分:0)

删除所有foreign_key规范

belongs_to :father, :class_name => "Idea"
has_many :children, :class_name => "Idea", :dependent => :destroy

并且,请确保您的迁移在father_id中添加了ideas