有一个看错了桌子

时间:2012-01-05 01:13:05

标签: ruby-on-rails has-one

我试图在RoR中建立has one关系。协议有一个联系人。在协议表中有一个名为contact_id的列。

当我尝试拨打这样一个agreenment的联系人时:<%= agreement.contact.name %>(联系人表格中有一列name)我收到错误Unknown column 'contacts.agreement_id'它应该在哪里寻找{{1} }

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

迈克尔的回答是正确的;外键必须始终位于“belongs_to”另一个模型的模型的表中。

但是,最好的答案可能是颠倒关系:也就是说,您确定协议不属于联系人,而不是拥有一个联系?如果切换关系,则rails将正确地知道在协议表中查找外键,而不是联系表。

This Rails Guide has a more thorough discussion关于has_onebelongs_to之间的选择。

答案 1 :(得分:0)

您的contacts表需要添加外键迁移,即您需要创建一个整数列agreement_id。确保你做rake db:migrate,这应该有效。

请记住,FK位于关系的'belongs_to'表格一侧。因此,协议has_one联系并与belongs_to达成协议。