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 methoddefault\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是的对不起,我没有正确设置标题