我有一个附加范围的用户模型。让我们称之为foo
class User < ActiveRecord::Base
scope :foo, ->(thing) { find_by(something: thing) }
end
让我们假设thing='bar'
我在数据库中有一条something=baz
的记录,所以当我这样做时
User.foo('bar')
我不应该得到任何结果。
但是,这会返回一个ActiveRecord::Relation
,其中包含数据库中不匹配的结果。
正如您所看到的,我正在使用find_by
,因此我不确定为什么我会找回关系。
答案 0 :(得分:1)
你滥用范围。他们需要返回关系,以便可以将其他范围链接到它们上。
您的find_by
可能实际返回nil
,在这种情况下,ActiveRecord会忽略nil
并返回all
,因此链接不会被破坏。