使用class_name时,dependent destroy失败

时间:2014-08-05 17:25:05

标签: ruby-on-rails ruby-on-rails-4

我有一个形成树结构的自引用模型。节点如下所示:

class Node < ActiveRecord::Base
  belongs_to :parent, class_name: Node
  has_many :children, :dependent => :destroy, class_name: Node
end

当我试图销毁一个时,我得到以下内容:

Node Load (0.3ms)  SELECT "nodes".* FROM "nodes"  WHERE "nodes"."node_id" = ?  [[nil, 4]]
SQLite3::SQLException: no such column: nodes.node_id: SELECT "nodes".* FROM "nodes"  WHERE "nodes"."node_id" = ?

我相信正在发生的事情是复数化器期望parent_id是node_id(因为类名)。我不知道如何解决这个问题。

修改

应用答案后的模型:

class Node < ActiveRecord::Base
  belongs_to :parent, class_name: Node, foreign_key: :parent_id
  has_many :children, class_name: Node, foreign_key: :parent_id, :dependent => :destroy
end

1 个答案:

答案 0 :(得分:1)

问题是对的,因为您将名称从Node更改为:parent,默认情况下,Rails会查找node_id而不是parent_id。要解决此问题,请添加foreign_key: :parent_id

所以该行应如下所示:

belongs_to :parent, class_name: Node, foreign_key: :parent_id