Мне интересно, как это делается в Rails 4 или я просто использую подход Rails 3 для использования лямбда-выражения, которое может передавать аргумент таким же образом с 4, как и с 3.
Я довольно новичок в Rails 3 и пытаюсь проработать некоторые примеры, использующие Rails 4.
Вот мой код Rails 3:
class Person < ActiveRecord::Base
scope :find_lazy, lambda {|id| where(:id => id)}
end
# In console I can call
Person.find_lazy(1)
Так что, если это Rails 4, это использовать -> {}, это лямбда, верно? scope :all_lazy, -> { select("*") }
Что делать, если мне нужен спор. Я попробовал несколько разных идей и получил ошибки аргумента в консоли при использовании -> {}.
scope :in_daterange, ->(start_date, end_date) { where(created_at: start_date.to_date.beginning_of_day..end_date.to_date.end_of_day) }
scope :find_lazy, ->(param)
). В Ruby 2+ пробел разрешен. Больше информации здесь ...scope :find_lazy, -> id { where id: id }
Ruby также не устарел в старом стиле лямбды, так что если вы чувствуете себя более комфортно, используйте его во что бы то ни стало.
Мне лично не нравится синтаксис «лямбда-лабиринта», но в итоге они, вероятно, станут нормой, так что не повредит им привыкнуть.
источник
Rails 4, вы можете сделать:
Это было в старом рубине:
Лучший хеш:
источник
парень, я обычно использовал синтаксис программирования ниже
Но когда я просматривал свой код с использованием Codacy, я обнаружил, что он предупреждает меня об этом синтаксисе
Я изменил его, и он работает хорошо
источник
Для поддержки ассоциаций:
источник
эквивалентно
На основе рубина по направляющим :
Using a class method is the preferred way to accept arguments for scopes.
Нет причин использовать области вместе с лямбдами в качестве предпочтения методам класса. Это вопрос личных предпочтений. Но, если вы хотите следовать рекомендациям, вы должны использовать метод класса, когда задействованы аргументы.
источник