解决方法
它是.to_a.find {…}的捷径.这是方法的
source code:
def find(*args) if block_given? to_a.find(*args) { |*block_args| yield(*block_args) } else find_with_ids(*args) end end
如果传递一个块,它将调用.to_a
(加载所有记录)并在阵列上调用Enumerable#find
.
换句话说,它允许您在ActiveRecord :: Relation上使用Enumerable #find.如果无法在sql中表达或评估您的条件,这可能很有用,例如:查询serialized attributes:
Consumer.find { |c| c.preferences[:foo] == :bar }
为了避免混淆,我更喜欢更明确的版本:
Consumer.all.to_a.find { |c| c.preferences[:foo] == :bar }