Zastanawiam się, jak to jest zrobione w Rails 4 lub czy po prostu używam podejścia Rails 3 do używania lambdy, która może przekazać argument w taki sam sposób, jak w przypadku 4, jak w przypadku 3.
Jestem całkiem nowy w Rails 3 i próbuję przepracować kilka przykładów z Rails 4.
Oto mój kod Rails 3:
class Person < ActiveRecord::Base
scope :find_lazy, lambda {|id| where(:id => id)}
end
# In console I can call
Person.find_lazy(1)
Więc jeśli to jest sposób Railsów 4 to użycie -> {}, to jest lambda, prawda? scope :all_lazy, -> { select("*") }
A jeśli potrzebuję argumentu. Wypróbowałem kilka różnych pomysłów i otrzymałem błędy argumentów w konsoli podczas używania -> {}.
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)
). W Ruby 2+ spacja jest dozwolona. Więcej informacji tutaj ...scope :find_lazy, -> id { where id: id }
Ruby również nie porzucił starego stylu lambdy, więc jeśli czujesz się bardziej komfortowo, używając go, zrób to.
Osobiście nie podoba mi się składnia stabby lambda, ale ostatecznie prawdopodobnie staną się one normą, więc przyzwyczajenie się do nich nie zaszkodzi.
źródło
Rails 4, możesz:
To było w starym rubinie:
Lepszy haszysz:
źródło
facet Zwykle używałem poniższej składni programowania
Ale kiedy przeglądałem mój kod za pomocą Codacy, zauważyłem, że ostrzega mnie o tej składni
Zmieniłem to na i działa dobrze
źródło
Aby wspierać stowarzyszenia:
źródło
jest równoważne z
Na podstawie prowadnicy Ruby on Rails :
Using a class method is the preferred way to accept arguments for scopes.
Nie ma powodu, aby używać zakresów razem z lambdami zamiast metod klasowych. To kwestia osobistych preferencji. Ale jeśli chcesz postępować zgodnie z wytycznymi, powinieneś użyć metody class, gdy w grę wchodzą argumenty.
źródło