4

我在使用 Rails 4.0.0.beta 时收到以下错误:

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

使用 Rails 3.2.x 时我没有遇到异常。

我将 Ruby 1.9.3-p194 用于 Rails 3.2.13 和 Rails 4.0.0.beta。

问题源于以下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

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

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

4

1 回答 1

7

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

于 2013-03-12T15:01:12.980 回答