2014-02-18 63 views
1

我有轨道上的红宝石项目3.2.14。我有2个表名为“国家”和“用户”。在“用户”表中有FK名为“countries_id”。 的型号我有做表的关系,如: 在countries.rb我已成立类似的关系:检查模型上的关系表,轨道上的红宝石

class Countries < ActiveRecord::Base 
    self.primary_key = "id" 
    has_many :users, :dependent => :destroy # plural 
end 

,并在像users.rb的:

class Users < ActiveRecord::Base 
    self.primary_key = "id" 


    belongs_to :countries, 
       :class_name => "Countries", 
       :foreign_key => "countries_id" 

end 

,当我想查多的关系,这是没.. 我输入轨控制台命令像下面

c=Countries.find_by_id(1) 

,然后当我键入命令u=c.users,我有一些错误 错误:

c=Countries.find_by_id(1) 
    Countries Load (0.3ms) SELECT `countries`.* FROM `countries` WHERE `countries`.`id` = 1 LIMIT 1 
=> #<Countries id: 1, code: "IND", name: "Indonesia", created_at: "2014-02-17 09:18:11", updated_at: "2014-02-17 09:18:11"> 
1.9.3-p484 :012 > u=c.users 
NameError: uninitialized constant Countries::User 
    from /home/vinra/.rvm/gems/[email protected]/gems/activerecord-3.2.14/lib/active_record/inheritance.rb:111:in `compute_type' 
    from /home/vinra/.rvm/gems/[email protected]/gems/activerecord-3.2.14/lib/active_record/reflection.rb:172:in `klass' 
    from /home/vinra/.rvm/gems/[email protected]/gems/activerecord-3.2.14/lib/active_record/associations/association.rb:118:in `klass' 
    from /home/vinra/.rvm/gems/[email protected]/gems/activerecord-3.2.14/lib/active_record/associations/association.rb:171:in `find_target?' 
    from /home/vinra/.rvm/gems/[email protected]/gems/activerecord-3.2.14/lib/active_record/associations/collection_association.rb:334:in `load_target' 
    from /home/vinra/.rvm/gems/[email protected]/gems/activerecord-3.2.14/lib/active_record/associations/collection_proxy.rb:44:in `load_target' 
    from /home/vinra/.rvm/gems/[email protected]/gems/activerecord-3.2.14/lib/active_record/associations/collection_proxy.rb:87:in `method_missing' 
    from /home/vinra/.rvm/gems/[email protected]/gems/railties-3.2.14/lib/rails/commands/console.rb:47:in `start' 
    from /home/vinra/.rvm/gems/[email protected]/gems/railties-3.2.14/lib/rails/commands/console.rb:8:in `start' 
    from /home/vinra/.rvm/gems/[email protected]/gems/railties-3.2.14/lib/rails/commands.rb:41:in `<top (required)>' 
    from script/rails:6:in `require' 
    from script/rails:6:in `<main>' 
1.9.3-p484 :013 > ^C 
1.9.3-p484 :013 > 

我真的跳有人知道我的问题,反正 谢谢你,,我的英语不好:)

+0

请按照钢轨命名约定模型名称不应该复数 –

+0

你是什么意思,,可以更具体吗? –

回答

3

你应该改变很多事情对不起您的代码:

应用程序/模型/ country.rb

class Country < ActiveRecord::Base 
    has_many :users, :dependent => :destroy 
end 

应用程序/模型/ user.rb

class Users < ActiveRecord::Base 
    belongs_to :country, 
       :foreign_key => "countries_id" 
end 

而且使用这样的:

country = Country.find(1) 
p country.users 
+0

为什么我必须使用类名“国家”我已经创建名称国家g模型和数据库我的表我也指定国家,, 有什么不同?无论如何谢谢你的回答 –

+0

所有的导轨模型都应该是Singular。所以你也需要重新命名你的表格。 –

0

问题是Rails的Active Record模型不能是复数。你用复数形式创建模型,所以将它们改为单数或更好的方法是用单数名称再次创建它们。

Countries应该是CountryUsers应该是User

有关命名约定的更多信息,请参见This

希望它能帮助!

+0

感谢您的回答,我必须从头开始重建我的项目吗?或者我可以从迁移中编辑名称表和模型? –

+0

首先尝试编辑您的模型名称以单数和检查。如果它不工作,则必须使用单数名称重新创建它们。 – Pavan