2013-01-17 41 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

相關問題