Почему я получаю неопределенный метод default_scoped? - PullRequest
0 голосов
/ 26 декабря 2018

Начиная с объектного контракта, я хотел бы получить все контракты, которые получают продукт, относящийся к объекту 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 merge '


схема.руб

  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 голосов
/ 26 декабря 2018

Здесь:

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

Вы передаете хеш-параметр в merge.Вместо этого вы должны присоединиться к областям действия:

scope :obseques, -> {
  joins(:produit).
    where(produit_id: Produit.obseque.map(&:id))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...