从对象合同开始,我想获得所有与对象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"
答案 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))
}