为什么我得到未定义的方法“ default_scoped”?

时间:2018-12-26 09:53:14

标签: 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 })

contrat.rb

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

调用Contrat.obseques应该返回所有与product相关的obseque的合同

但是我得到了:

  
    

NoMethodError:未定义的方法default_scoped?' for {:produit_id=>[3]}:Hash from /usr/local/bundle/gems/activerecord-3.2.15/lib/active_record/relation/spawn_methods.rb:11:in合并'

  

schema.rb

  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

Produit.rb

 has_one :obseque, :class_name => "Obseque", :foreign_key => "produit_id"
 has_many :contrats, :class_name => "Contrat", :foreign_key => "produit_id"

contrat.rb

  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"

obseque.rb

  belongs_to :produit, :class_name => "Produit", :foreign_key => "produit_id"

1 个答案:

答案 0 :(得分:1)

这里:

scope :obseques, -> {
  joins(:produit).
    merge(produit_id: Produit.obseque.map(&:id)) # ⇐ HERE
}

您正在将哈希参数传递给merge。您应该改为加入范围:

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