Rails模型范围返回不正确的数据

时间:2015-11-17 13:29:52

标签: ruby-on-rails activerecord

我有一个附加范围的用户模型。让我们称之为foo

class User < ActiveRecord::Base
  scope :foo, ->(thing) { find_by(something: thing) }
end

让我们假设thing='bar'

我在数据库中有一条something=baz的记录,所以当我这样做时 User.foo('bar') 我不应该得到任何结果。

但是,这会返回一个ActiveRecord::Relation,其中包含数据库中不匹配的结果。

正如您所看到的,我正在使用find_by,因此我不确定为什么我会找回关系。

1 个答案:

答案 0 :(得分:1)

你滥用范围。他们需要返回关系,以便可以将其他范围链接到它们上。

您的find_by可能实际返回nil,在这种情况下,ActiveRecord会忽略nil并返回all,因此链接不会被破坏。