I think it should be:
scope :find_lazy, -> (id) { where(id: id) }
Ruby has not deprecated the old style of lambda either, so if you feel more comfortable using that by all means go for it.
I don't personally like the stabby lambda's syntax myself but eventually they will probably become the norm so it doesn't hurt to get used to them.
Rails 4, you can do:
scope :find_lazy, -> (id) { where(id: id) }
That was in the old ruby:
:id => id
Better hash:
id: id
guy I was usually using the below programming syntax
scope :find_lazy, -> (id) { where(id: id) }
But when I was reviewing my code using Codacy I found it alerting me about this syntax
Use the `lambda` method for multiline lambdas.
I changed it to be and it working well
scope :find_lazy, lambda {|id|
where(id: id)
}
To support associations:
scope :find_lazy, -> (object) { where(object_id: object.id) }
scope :find_lazy, -> (id) { where(id: id) }
is equivalent with
self.find_lazy(id)
where(id: id)
end
Based on ruby on rails guide: Using a class method is the preferred way to accept arguments for scopes.
There is no reason to use scopes together with lambdas in preference to class methods. It is a matter of personal preference. But, if you want to follow the guidelines, you should use the class method when arguments are involved.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With