我对两个类进行了更改以通过这种方式链接它们
class Account < ActiveRecord::Base
belongs_to :customer,:foreign_key=>'name_id'
end
class Customer < ActiveRecord::Base
has_many :accounts
end
我在两个表中有数据,其中Customer中的引用键'name'和Account匹配的'name_id'。但是当我去“脚本/控制台”并输入
时 Account.find(0).customer
即使有匹配的数据,我也会 nil !这里我的错误是什么?对不起,如果它是一个愚蠢的问题,我是新来的铁路
答案 0 :(得分:1)
让我考虑你对Shyam的评论。添加自定义密钥时,是否有自己的迁移文件中的字段,或者在您第一次运行db:migrate时它们是否包含在迁移文件中?如果这些列已经存在,那么是的,只需保存模型即可。
您可以在rails控制台中快速执行:Account
和Customer
,以确保正确构建这些类,这就是给您提供问题的关系。
另一方面,我会尽快使用“name”作为主键。这是糟糕的设计,会让你头疼。这不仅仅是一个铁轨事件,只是想想,约翰史密斯在电话簿中有多少人?然后,您必须使用带有地址的组合键,并且可能需要更多才能获得唯一的行。如果您考虑一下,电话簿有一个唯一的电话号码作为标识符,它只是按名称排序。
答案 1 :(得分:0)
如果我理解正确,我认为您需要在两个关联上设置:foreign_key
和:primary_key
。
class Account < ActiveRecord::Base
belongs_to :customer,:foreign_key=>'name_id', :primary_key=>'name'
end
class Customer < ActiveRecord::Base
has_many :accounts, :primary_key=>'name', :foreign_key=>'name_id'
end
答案 2 :(得分:0)
您确实应该遵循Rails约定:accounts
表中的外键应为customer_id
。将其更改为可以解决您遇到的问题。
答案 3 :(得分:0)
主键从1开始,请尝试:Account.find(1).customer