Je me demande comment ce qui suit est fait dans Rails 4 ou si j'utilise simplement l'approche Rails 3 pour utiliser un lambda qui peut passer un argument de la même manière avec 4 que je le fais avec 3.
Je suis assez nouveau dans Rails 3 et j'essaie de travailler sur quelques exemples exécutant Rails 4.
Voici mon code Rails 3:
class Person < ActiveRecord::Base
scope :find_lazy, lambda {|id| where(:id => id)}
end
# In console I can call
Person.find_lazy(1)
Donc, si c'est la façon dont Rails 4 utilise le -> {}, c'est un lambda, non? scope :all_lazy, -> { select("*") }
Et si j'avais besoin d'un argument. J'ai essayé quelques idées différentes et j'obtiens des erreurs d'argument dans la console lors de l'utilisation de -> {}.
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)
). Dans Ruby 2+, l'espace est autorisé. Plus d'infos ici ...scope :find_lazy, -> id { where id: id }
Ruby n'a pas non plus désapprouvé l'ancien style de lambda, donc si vous vous sentez plus à l'aise avec cela, allez-y.
Personnellement, je n'aime pas moi-même la syntaxe du lambda stabby, mais elle deviendra probablement la norme, donc ça ne fait pas de mal de s'y habituer.
la source
Rails 4, vous pouvez faire:
C'était dans le vieux rubis:
Meilleur hachage:
la source
mec j'utilisais habituellement la syntaxe de programmation ci-dessous
Mais lorsque j'ai examiné mon code à l'aide de Codacy, je l'ai trouvé m'alerter sur cette syntaxe
Je l'ai changé pour être et ça marche bien
la source
Pour soutenir les associations:
la source
est équivalent à
Basé sur le guide rubis sur rails :
Using a class method is the preferred way to accept arguments for scopes.
Il n'y a aucune raison d'utiliser des étendues avec des lambdas de préférence aux méthodes de classe. C'est une question de préférence personnelle. Mais, si vous souhaitez suivre les instructions, vous devez utiliser la méthode de classe lorsque des arguments sont impliqués.
la source