2016-03-28 2 views
-1

Я не знаком с использованием лямбда. Это вызов? Или это просто кусок синтаксического сахара?Области в Rails. Это лямбда?

scope :by_frequency, -> (frequency) { where(delivery_frequency_id: frequency) } 

Почему частота является скобкой?

ответ

1

Да это лямбда - поскольку Ruby 1.9 вы могли бы написать лямбда в сокращенном виде у вас есть, тогда как раньше только синтаксис был такой:

lambda {|x| 2 * x } 

В этом случае пример здесь аргумент x передается в котором эквивалент frequency в вашем примере - это необходимый аргумент для лямбда. Ruby lambda применяет этот требуемый аргумент, и он будет жаловаться, если вы вызвали его без значения, которое идеально, поскольку запрос запроса может не иметь смысла без него.

Вся строка синтаксического сахара Rails, чтобы позволить действительно хороший DSL (Domain Specific Language), но все, что он действительно делает, это хранить лямбда, которую вы написали, по существу, статический метод в классе. Лямбда вызывается при вызове этого метода.

0

Вы в основном правы, звонки в scope, как и тот, который вы написали, являются просто синтаксическим сахаром для написания метода класса в рассматриваемом классе активной записи.

Кроме того, для этого используется лямбда-нотация.

Однако вы должны иметь в виду, что вы действительно делаете запрос, используя ключевое слово where. Это то же самое, как говорят ClassName.where()

Первая частота определяемый в скобках после -> является параметром, который передается в метод области видимости создаваемого (и затем впоследствии перешли в where).

Итак, вы определили метод класса, который возвращает все экземпляры этого объекта, где delivery_frequency_id равен определенному параметру.

Смежные вопросы