Именованные расширения области видимости — вызывающий метод вне блока Do

#ruby-on-rails #dry #named-scope

#ruby-on-rails #dry #именованная область видимости

Вопрос:

У меня есть следующий named_scope в моей пользовательской модели:

   named_scope :all_stars, :joins => [:all_stars] do
    def overall
      self.find(:all, :conditions => ['recordable_type = ?', 'User'])
    end
  end
  

Я хочу сделать это:

   named_scope :all_stars, :joins => [:all_stars] do
    def overall
      overall_all_stars_condition
    end
  end

  def overall_all_stars_condition
    self.find(:all, :conditions => ['recordable_type = ?', 'User']) 
  end
  

Можно ли это сделать?

Ответ №1:

Если вы можете преобразовать другую вещь в другую именованную область, вы можете затем объединить две области, что даст вам то, что вы хотите.

 named_scope :all_stars, :joins => [:all_stars]
named_scope :overall, :conditions => ['recordable_type = ?', 'User']
  

Тогда вы должны иметь возможность вызывать его как таковой:

 object.all_stars.overall.all
object.overall.all_stars.find(:all)
# etc
  

А также создайте метод, который делает то же самое:

 def overall_all_stars_condition
  self.all_stars.overall.all
end