非模型中的更改不向类添加方法

时间:2011-01-24 05:08:53

标签: ruby-on-rails ruby-on-rails-3

我对两个类进行了更改以通过这种方式链接它们

    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 !这里我的错误是什么?对不起,如果它是一个愚蠢的问题,我是新来的铁路

4 个答案:

答案 0 :(得分:1)

让我考虑你对Shyam的评论。添加自定义密钥时,是否有自己的迁移文件中的字段,或者在您第一次运行db:migrate时它们是否包含在迁移文件中?如果这些列已经存在,那么是的,只需保存模型即可。

您可以在rails控制台中快速执行:AccountCustomer,以确保正确构建这些类,这就是给您提供问题的关系。

另一方面,我会尽快使用“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