Ruby on rails 为什么我会得到未定义的方法'default#u scoped?';?

Ruby on rails 为什么我会得到未定义的方法'default#u scoped?';?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,从对象合同开始,我想得到所有与对象相关的合同obseque 所以我创建了一个范围: produit.rb def self.named_scope_obseque_method where(:code_reference => Produit::PRODUIT_REF_OB) end scope(:obseque, proc { named_scope_obseque_method }) scope :obseques, -> {joins(:produit).merge(pr

从对象合同开始,我想得到所有与对象相关的合同
obseque

所以我创建了一个范围:

produit.rb

def self.named_scope_obseque_method
 where(:code_reference => Produit::PRODUIT_REF_OB)
end

scope(:obseque, proc { named_scope_obseque_method })
scope :obseques, -> {joins(:produit).merge(produit_id: Produit.obseque.map(&:id))}
  create_table "produits", :force => true do |t|
    t.string "initiales",      :limit => 2
    t.string "code_reference", :limit => 100
  end

  create_table "obseques", :force => true do |t|
    t.string  "nom"
    t.integer "produit_id"
  end

  create_table "contrats", :force => true do |t|
    ...
    t.integer  "produit_id"
    ...
  end
 has_one :obseque, :class_name => "Obseque", :foreign_key => "produit_id"
 has_many :contrats, :class_name => "Contrat", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
contrat.rb

def self.named_scope_obseque_method
 where(:code_reference => Produit::PRODUIT_REF_OB)
end

scope(:obseque, proc { named_scope_obseque_method })
scope :obseques, -> {joins(:produit).merge(produit_id: Produit.obseque.map(&:id))}
  create_table "produits", :force => true do |t|
    t.string "initiales",      :limit => 2
    t.string "code_reference", :limit => 100
  end

  create_table "obseques", :force => true do |t|
    t.string  "nom"
    t.integer "produit_id"
  end

  create_table "contrats", :force => true do |t|
    ...
    t.integer  "produit_id"
    ...
  end
 has_one :obseque, :class_name => "Obseque", :foreign_key => "produit_id"
 has_many :contrats, :class_name => "Contrat", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
调用
contract.obseques
应返回所有包含与
obsequee

但我得到:

NoMethodError:undefined method
default\u scoped?{:produit\u id=>[3]}:Hash
来自/usr/local/bundle/gems/activerecord-3.2.15/lib/active_record/relation/spawn_methods.rb:11:in
merge'


schema.rb

def self.named_scope_obseque_method
 where(:code_reference => Produit::PRODUIT_REF_OB)
end

scope(:obseque, proc { named_scope_obseque_method })
scope :obseques, -> {joins(:produit).merge(produit_id: Produit.obseque.map(&:id))}
  create_table "produits", :force => true do |t|
    t.string "initiales",      :limit => 2
    t.string "code_reference", :limit => 100
  end

  create_table "obseques", :force => true do |t|
    t.string  "nom"
    t.integer "produit_id"
  end

  create_table "contrats", :force => true do |t|
    ...
    t.integer  "produit_id"
    ...
  end
 has_one :obseque, :class_name => "Obseque", :foreign_key => "produit_id"
 has_many :contrats, :class_name => "Contrat", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
Produit.rb

def self.named_scope_obseque_method
 where(:code_reference => Produit::PRODUIT_REF_OB)
end

scope(:obseque, proc { named_scope_obseque_method })
scope :obseques, -> {joins(:produit).merge(produit_id: Produit.obseque.map(&:id))}
  create_table "produits", :force => true do |t|
    t.string "initiales",      :limit => 2
    t.string "code_reference", :limit => 100
  end

  create_table "obseques", :force => true do |t|
    t.string  "nom"
    t.integer "produit_id"
  end

  create_table "contrats", :force => true do |t|
    ...
    t.integer  "produit_id"
    ...
  end
 has_one :obseque, :class_name => "Obseque", :foreign_key => "produit_id"
 has_many :contrats, :class_name => "Contrat", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
contrat.rb

def self.named_scope_obseque_method
 where(:code_reference => Produit::PRODUIT_REF_OB)
end

scope(:obseque, proc { named_scope_obseque_method })
scope :obseques, -> {joins(:produit).merge(produit_id: Produit.obseque.map(&:id))}
  create_table "produits", :force => true do |t|
    t.string "initiales",      :limit => 2
    t.string "code_reference", :limit => 100
  end

  create_table "obseques", :force => true do |t|
    t.string  "nom"
    t.integer "produit_id"
  end

  create_table "contrats", :force => true do |t|
    ...
    t.integer  "produit_id"
    ...
  end
 has_one :obseque, :class_name => "Obseque", :foreign_key => "produit_id"
 has_many :contrats, :class_name => "Contrat", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
obsequee.rb

def self.named_scope_obseque_method
 where(:code_reference => Produit::PRODUIT_REF_OB)
end

scope(:obseque, proc { named_scope_obseque_method })
scope :obseques, -> {joins(:produit).merge(produit_id: Produit.obseque.map(&:id))}
  create_table "produits", :force => true do |t|
    t.string "initiales",      :limit => 2
    t.string "code_reference", :limit => 100
  end

  create_table "obseques", :force => true do |t|
    t.string  "nom"
    t.integer "produit_id"
  end

  create_table "contrats", :force => true do |t|
    ...
    t.integer  "produit_id"
    ...
  end
 has_one :obseque, :class_name => "Obseque", :foreign_key => "produit_id"
 has_many :contrats, :class_name => "Contrat", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"
在这里:

您正在将散列参数传递给
merge
。您应该加入作用域:

scope :obseques, -> {
  joins(:produit).
    where(produit_id: Produit.obseque.map(&:id))
}

@sawa是的对不起,我没有正确设置标题