2014-06-18 89 views
0

我有一個模型,項目,其中有兩個belongs_to的關聯到同一個模式:Rails的ActiveRecord的:2個協會同型號

belongs_to :source_connection, class: Connection 
belongs_to :destination_connection, class: Connection 

但在另一邊,每個連接應該只有一個聯想到的項目。添加

has_one :project, foreign_key_id: source_connection_id 
or 
has_one :project, foreign_key_id: destination_connection_id 

不會削減它,因爲連接本身並不知道它是否是源連接或目標連接。

很明顯,我設計這個關聯的方式存在一個缺陷,我只是好奇它的正確方法。值得一提的是,'Connection'有很多繼承類(SSHConnection,S3Connection等),所以將Connection類分成'Source'和'Destination'Connection模型會導致很多重複。

任何想法的歡迎。

回答

1

您近了!你可以重新設計,或者你可以嘗試不同的命名項目,爲不同的連接類型:

has_one :source_project, class: "Project", foreign_key_id: source_connection_id 
or 
has_one :destination_project, class: "Project", foreign_key_id: destination_connection_id 

這允許你叫@ connection.source_project以獲取這是連接是源連接,例如該項目。可能有更清晰的方法來爲您的目標命名。

0

鐵軌4.2.5,名爲協會的語法略有上升,從在接受的答案改變,新的版本將是:

has_one :source_project, class_name: "Project", foreign_key: :source_connection_id 
or 
has_one :destination_project, class_name: "Project", foreign_key: :destination_connection_id