Области видимости и методы класса в Rails 3

Являются ли области видимости просто синтаксическим сахаром, или есть какое-то реальное преимущество в их использовании по сравнению с методами класса?

Простым примером может быть следующий. Насколько я могу судить, они взаимозаменяемы.

scope :without_parent, where( :parent_id => nil )

# OR

def self.without_parent
  self.where( :parent_id => nil )
end

Для чего больше подходит каждый из методов?

РЕДАКТИРОВАТЬ

named_scope.rb упоминает следующее (как указано ниже goncalossilva ):

Строка 54 :

Обратите внимание, что это просто «синтаксический сахар 'для определения фактического класса method

Строка 113 :

Именованные области также могут иметь расширения, так же, как с объявлениями has_many:

class Shirt < ActiveRecord::Base
  scope :red, where(:color => 'red') do
    def dom_id
      'red_shirts'
    end
  end
end

6
задан Community 23 May 2017 в 12:27
поделиться