Rails同一张表的外键

4

我有一个Rails应用程序,其中包含工作单。 我将从另一个系统加载工作单。该系统使用单个表格来存储父工作单和子工作单。

我在工作单表中添加了一个名为parent_id的字段

以下是工作单模型中的正确代码吗?

 class ParentWorkorder
   belongs_to :parent, class_name => "Workorder"
   belongs_to :child, class_name =>  "Workorder", :foreign_key => "parent_id"
 end

您是否建议这样做-创建子工作订单表? 我认为这可能会使其更难与其他系统集成。

非常感谢您的指导!


不要忘记在 class_name 前面加上 : - alexpls
2个回答

4
您也可以在Rails中使用单个表格来完成此操作,同样可以使用单个模型。我不明白为什么您需要增加一个额外的“ParentWorkorder”模型来复杂化您的应用程序。相反,我建议采取以下方式:
class Workorder < ActiveRecord::Base
  belongs_to :parent, :class_name => "Workorder", :foreign_key => "parent_id"
  has_many :children, :class_name => "Workorder", :foreign_key => "parent_id"
end

我相信这会给你想要的功能。

我理解,在迁移文件中使用t.references:workorder将会创建一个名为“parent_id”的列,是这样吗? - Lori

2

我会把孩子定义为 has_one 或 has_many(如果一个父亲可以有多个孩子)。但是,这个方法确实很有效。

在可能的情况下,建议您养成使用符号而不是字符串的习惯。


谢谢您的回复,但是请给我一个使用符号而不是字符串的例子。对不起,我很无知。 - Reddirt
1
你可以使用:work_order代替"WorkOrder",使用:parent_id代替"parent_id"。符号类似于字符串,但是不可变,这需要更少的资源。 http://www.troubleshooters.com/codecorn/ruby/symbols.htm - cpuguy83

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接