我試圖在RoR中建立一個has one
關係。協議有一個聯繫人。在協議表中有一列叫contact_id
。有一個看錯表
當我嘗試調用agreenment的聯繫,像這樣:<%= agreement.contact.name %>
(接觸表有一欄name
)我得到的錯誤Unknown column 'contacts.agreement_id'
應在何處尋找agreement.contact_id
有什麼建議?
我試圖在RoR中建立一個has one
關係。協議有一個聯繫人。在協議表中有一列叫contact_id
。有一個看錯表
當我嘗試調用agreenment的聯繫,像這樣:<%= agreement.contact.name %>
(接觸表有一欄name
)我得到的錯誤Unknown column 'contacts.agreement_id'
應在何處尋找agreement.contact_id
有什麼建議?
您的contacts
表需要添加外鍵遷移,即您需要創建一個整數爲agreement_id
的列。確保你做rake db:migrate
,這應該工作。
請記住,FK位於關係的'belongs_to'表格一側。所以,協議has_one
聯繫和聯繫belongs_to
協議。
有趣。這會導致許多不同的表格會有聯繫的事實嗎? – 2012-01-05 11:54:01
如果許多表有聯繫人,則需要在聯繫人的「belongs_to」上設置多態關聯。在Contact模型中,'belongs_to:可聯繫的,:polymorphic => true'。然後在協議模型中:'has_one:contact,:as =>:可聯繫的'。您還需要在聯繫人模型「contactable_type」(它保存關聯的類名稱)中添加一個新列,並將「agreement_id」重命名爲「contactable_id」。閱讀關於關聯的Rails指南以獲取更多信息。 – 2012-01-10 04:50:58
邁克爾的回答是對的;外鍵必須始終位於表的「belongs_to」模型的另一個模型中。
然而,最適合你的答案可能是反轉的關係:那就是,你確定協議不屬於接觸,而不是有一個接觸?如果切換關係,則rails將正確知道在協議表中查找外鍵,而不是聯繫人表。
This Rails Guide has a more thorough discussion關於在has_one
和belongs_to
之間的選擇。
好點Rob - 我只提供瞭解決方案,讓它「爲OP」工作,而不是提供更好的方法。 'having_one'是一種我很厭煩的'設計'氣味。我寧願堅持更靈活的'has_many,through' – 2012-01-06 10:44:20
張貼您的模特 – s84 2012-01-05 01:19:07