2013-01-17 38 views
3

我有一个包含工作订单的Rails应用程序。我将从另一个系统加载工作单。该系统为父母和子女工作单位使用单一表格。Rails外键到同一张表

我添加一个字段称为工作订单表PARENT_ID

这是在工单模式编码的权利?

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

或者你会建议不要这样做 - 而是建立一个儿童工作表?我认为这可能会使与其他系统的整合变得更加困难。

任何指导将不胜感激!

+0

不要忘记'class_name'之前的':'! – alexpls

回答

3

您可以在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 

我很确定这会给你你想要的功能。

+0

感谢您的信息! – Reddirt

+0

似乎工作正常 - 再次感谢。 – Reddirt

+0

我认为迁移文件中的't.references:workorder'会创建一个名为'parent_id'的列? – Lori

2

我会把孩子当作has_one或has_many(如果父母可以有多个)。但是,这很好。

您可能想养成在可能的情况下使用符号而非字符串的习惯。

+0

感谢您的输入 - 但请给我一个使用符号而不是字符串的例子。对不起,我的无知。 – Reddirt

+1

您可以使用work_order而不是“parent_id”来代替“WorkOrder”:parent_id 符号类似于字符串,但是不可变,这会占用较少的资源。 http://www.troubleshooters.com/codecorn/ruby/symbols.htm – cpuguy83

相关问题