2013-03-12 87 views
3

我使用Rails 4.0.0.beta收到以下错误:轨道4:未定义的方法`PRIMARY_KEY_NAME”

NoMethodError: undefined method `primary_key_name' for #<ActiveRecord::Reflection::AssociationReflection 

我没有得到的异常使用Rails 3.2.x.时

我对Rails 3.2.13和Rails 4.0.0.beta都使用了Ruby 1.9.3-p194。

问题从以下has_many声明茎:

class Store < ActiveRecord::Base 
    has_many :relationships 
    has_many :customers, :through => :relationships, :source => :user, 
    :conditions => { :relationships => { :description => "Customer" } } do 
     def <<(user) 
     proxy_association.owner.relationships.create(:description => "Customer", :user => user) 
     end 
    end 
end 

我有以下支持类:

class User < ActiveRecord::Base 
    has_one :relationship 
    has_one :store, :through => :relationship 
end 

class Relationship < ActiveRecord::Base 
    belongs_to :store 
    belongs_to :user 
end 

我想知道我怎么能实现使用Rails的相同has_many功能4友好的代码?

P.S.我知道我仍然使用旧式的语法,并且条件哈希现在需要一个proc或lambda,但是这些不应该导致undefined method异常。

+1

你什么时候收到这个错误?运行测试?我在Rails 4的“primary_key_name”回购中看到的唯一地方是[ActiveRecord :: FixtureSet](https://github.com/rails/rails/blob/master/activerecord/lib/active_record/fixtures.rb #L574-L576)。否则,也许这是一个与Rails 4不兼容的宝石。 – 2013-03-12 12:14:07

+0

我收到这个错误,试图使用Seedbank gem来填充种子。但是,我试过只执行一些涉及商店模型的创建语句(控制台),并且它也在该行中失败。我认为这与Seedbank或一般播种没有任何关系。这肯定与'has_many:customers'有关。错误的行号也将此行标识为罪魁祸首。我查了一下这个方法,也只能找到ActiveRecord :: FixtureSet的引用。 'ActiveRecord :: Reflection :: AssociationReflection。 primary_key_name'方法自3.1.0开始已被弃用。 – Jurgen 2013-03-12 13:24:38

+0

我正在逐个消除项目的宝石依赖......我希望找到其中的一个是罪魁祸首。 – Jurgen 2013-03-12 13:27:03

回答

7

我找到了罪魁祸首,它是perfectline/validates_existence宝石默认为已废弃的primary_key_name而不是foreign_keyActiveRecord::VERSION::MINOR >= 1 - 去数字!我已经提交了修复请求(https://github.com/perfectline/validates_existence/pull/20)。感谢您指引我在正确的方向@Beerlington。

相关问题