2012-01-05 32 views
0

我試圖在RoR中建立一個has one關係。協議有一個聯繫人。在協議表中有一列叫contact_id有一個看錯表

當我嘗試調用agreenment的聯繫,像這樣:<%= agreement.contact.name %>(接觸表有一欄name)我得到的錯誤Unknown column 'contacts.agreement_id'應在何處尋找agreement.contact_id

有什麼建議?

+0

張貼您的模特 – s84 2012-01-05 01:19:07

回答

0

您的contacts表需要添加外鍵遷移,即您需要創建一個整數爲agreement_id的列。確保你做rake db:migrate,這應該工作。

請記住,FK位於關係的'belongs_to'表格一側。所以,協議has_one聯繫和聯繫belongs_to協議。

+0

有趣。這會導致許多不同的表格會有聯繫的事實嗎? – 2012-01-05 11:54:01

+1

如果許多表有聯繫人,則需要在聯繫人的「belongs_to」上設置多態關聯。在Contact模型中,'belongs_to:可聯繫的,:polymorphic => true'。然後在協議模型中:'has_one:contact,:as =>:可聯繫的'。您還需要在聯繫人模型「contactable_type」(它保存關聯的類名稱)中添加一個新列,並將「agreement_id」重命名爲「contactable_id」。閱讀關於關聯的Rails指南以獲取更多信息。 – 2012-01-10 04:50:58

1

邁克爾的回答是對的;外鍵必須始終位於表的「belongs_to」模型的另一個模型中。

然而,最適合你的答案可能是反轉的關係:那就是,你確定協議不屬於接觸,而不是有一個接觸?如果切換關係,則rails將正確知道在協議表中查找外鍵,而不是聯繫人表。

This Rails Guide has a more thorough discussion關於在has_onebelongs_to之間的選擇。

+0

好點Rob - 我只提供瞭解決方案,讓它「爲OP」工作,而不是提供更好的方法。 'having_one'是一種我很厭煩的'設計'氣味。我寧願堅持更靈活的'has_many,through' – 2012-01-06 10:44:20

相關問題