Ich frage mich, wie das Folgende in Rails 4 gemacht wird oder ob ich nur den Rails 3-Ansatz verwende, um ein Lambda zu verwenden, das mit 4 ein Argument genauso übergeben kann wie mit 3.
Ich bin ziemlich neu in Rails 3 und versuche, einige Beispiele mit Rails 4 durchzuarbeiten.
Hier ist mein Rails 3 Code:
class Person < ActiveRecord::Base
scope :find_lazy, lambda {|id| where(:id => id)}
end
# In console I can call
Person.find_lazy(1)
Wenn dies also der Rails 4-Weg ist, das -> {} zu verwenden, ist das ein Lambda, oder? scope :all_lazy, -> { select("*") }
Was ist, wenn ich ein Argument brauche? Ich habe ein paar verschiedene Ideen ausprobiert und bei der Verwendung von -> {} Argumentationsfehler in der Konsole erhalten.
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)
) zulässt . In Ruby 2+ ist der Speicherplatz zulässig. Weitere Infos hier ...scope :find_lazy, -> id { where id: id }
Ruby hat auch den alten Lambda-Stil nicht missbilligt. Wenn Sie sich also wohler fühlen, sollten Sie sich dafür entscheiden.
Ich persönlich mag die Syntax des Stabby Lambda selbst nicht, aber irgendwann werden sie wahrscheinlich zur Norm, sodass es nicht schadet, sich an sie zu gewöhnen.
quelle
Schienen 4 können Sie tun:
Das war im alten Rubin:
Besserer Hash:
quelle
Ich habe normalerweise die folgende Programmiersyntax verwendet
Als ich meinen Code mit Codacy überprüfte, wurde ich auf diese Syntax aufmerksam
Ich habe es geändert und es funktioniert gut
quelle
Vereinigungen unterstützen:
quelle
ist gleichbedeutend mit
Basierend auf Ruby on Rails Guide :
Using a class method is the preferred way to accept arguments for scopes.
Es gibt keinen Grund, Bereiche zusammen mit Lambdas anstelle von Klassenmethoden zu verwenden. Es ist eine Frage der persönlichen Präferenz. Wenn Sie jedoch den Richtlinien folgen möchten, sollten Sie die Klassenmethode verwenden, wenn Argumente beteiligt sind.
quelle