当父母被删除时删除孩子不起作用

问题描述:

那么情况有点复杂!当父母被删除时删除孩子不起作用

我有一个问题模型

class Question < ActiveRecord::Base 
    has_many :answers, :dependent => :destroy 

然后回答型号

class Answer < ActiveRecord::Base 
    belongs_to :question, :counter_cache => true 
    has_many :rep_events, :class_name => "RepEvent", :foreign_key => "event_id", :dependent => :destroy 

和Finaly一个rep_event模型

class RepEvent < ActiveRecord::Base 
    belongs_to :answer 
end 

我代表事件可是没有任何主键。 它只有事项标识,其作用类似于answer_id

当我摧毁一个问题,我想删除有关它(问题,答案和Rep_Events)这就是为什么我使用:dependent => :destroy 我试图进入控制台一切并对其进行测试,但它给了我一些错误

NoMethodError: undefined method `eq' for nil:NilClass 

此错误是非常普遍的,但我认为,问题是,我rep_event类没有任何“answer_id”领域,但只有事项标识。那就是为什么我在我的关系中使用foreign_key =>“event_id”。

谁能告诉我问题是什么?

谢谢

+0

Rails喜欢使用它的模型来创建主键。如果你违反惯例,你可能需要明确设置一个。如果将'set_primary_key:event_id'添加到RepEvent类,它会起作用吗? – Raphomet 2010-09-30 04:38:20

+0

event_id不是主键。它只是一个外键。我的模型没有任何主键。 – Sharethefun 2010-10-01 00:15:08

的外键是不存在的应答模式,而不是RepEvent模型有一个名为“事项标识”的外键,其作用类似于answer_id,并链接到应答模式。如果这种情况下是正确的,你必须做以下更改在RepEvent模型

class RepEvent < ActiveRecord::Base 
    belongs_to :answer, :foreign_key => event_id 
end 

,并在你的答案模型

class Answer < ActiveRecord::Base 
    belongs_to :question, :counter_cache => true 
    has_many :rep_events, :class_name => "RepEvent", :dependent => :destroy 
end 

试试这个这个必须工作。

+0

几乎在那里!这给我一个错误,找不到answer_id。 我不能重命名我的表作为它的答案,但其他事件。我将不得不找出如何使它搜索rep_events.event_id而不是rep_events.answer_id。 这是错误: ActiveRecord :: StatementInvalid:PGError:错误:列rep_events.answer_id不存在 – Sharethefun 2010-10-01 00:15:36

+0

你能显示什么确切地说你的迁移rep_events包括我认为你的表中有一个从rep_events缺少的参考来回答 – Rohit 2010-10-01 05:15:03

+0

对不起,它有点凌乱作为评论: create_table:rep_events,:id => false do | t | t.integer“event_id”,:null => false t.string“event_type”,:limit => 12,:null => false t.integer“user_id”,:null => false t.integer“ author_id“,:null => false t.datetime”created_at“,:null => false – Sharethefun 2010-10-02 03:02:56