Gostaria de saber como é feito o seguinte no Rails 4 ou se apenas uso a abordagem do Rails 3 para usar um lambda que pode passar um argumento da mesma maneira com 4 do que com o 3.
Eu sou muito novo no Rails 3 e estou tentando trabalhar com algumas amostras executando o Rails 4.
Aqui está o meu código do Rails 3:
class Person < ActiveRecord::Base
scope :find_lazy, lambda {|id| where(:id => id)}
end
# In console I can call
Person.find_lazy(1)
Portanto, se essa é a maneira do Rails 4, é usar o -> {}, isso é um lambda, certo? scope :all_lazy, -> { select("*") }
E se eu precisasse de uma discussão. Tentei algumas idéias diferentes e obtive erros de argumento no console ao usar o -> {}.
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)
). No Ruby 2+, o espaço é permitido. Mais informações aqui ...scope :find_lazy, -> id { where id: id }
O Ruby também não obsoleta o estilo antigo do lambda; portanto, se você se sentir mais confortável usando isso, faça o mesmo.
Pessoalmente, eu não gosto da sintaxe do stabby lambda, mas, eventualmente, elas provavelmente se tornarão a norma, portanto não faz mal se acostumar com elas.
fonte
Rails 4, você pode fazer:
Isso estava no velho rubi:
Melhor hash:
fonte
cara, eu usava normalmente a sintaxe de programação abaixo
Mas quando eu estava revisando meu código usando o Codacy, achei que estava me alertando sobre essa sintaxe
Eu mudei para ser e está funcionando bem
fonte
Para apoiar associações:
fonte
é equivalente a
Baseado no guia Ruby on Rails :
Using a class method is the preferred way to accept arguments for scopes.
Não há razão para usar escopos juntamente com lambdas, de preferência aos métodos de classe. É uma questão de preferência pessoal. Mas, se você quiser seguir as diretrizes, use o método de classe quando houver argumentos envolvidos.
fonte