我有一个形成树结构的自引用模型。节点如下所示:
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
答案 0 :(得分:1)
问题是对的,因为您将名称从Node
更改为:parent
,默认情况下,Rails会查找node_id
而不是parent_id
。要解决此问题,请添加foreign_key: :parent_id
。
所以该行应如下所示:
belongs_to :parent, class_name: Node, foreign_key: :parent_id