在您实际尝试访问结果之前,Rails 不会评估查询。调用Model.where
只是返回一个ActiveRecord::Relation
你可以链接额外的where
/ order
/etc 调用。
试试这个(.all
强制评估查询并返回结果数组):
def self.my_func
Interest.where(id: [1,2]).all
end
请注意,实际上不应该这样做。ActiveRecord::Relation
让您的模型只允许从方法返回要好得多,因此调用代码可以对其应用额外的范围/排序方法。
另请注意,id in (?)
如果您只使用where(id: [1,2])
.
奖金说明:
在终端上,结果会Model.where
立即得到评估,因为 IRB 调用inspect
您输入的每个表达式的结果,因此它有一些要打印的内容,并且返回的结果会ActiveRecord::Relation
在检查时评估其查询。您可以通过添加绕过这一点来向自己证明这一点;nil
,以便您的语句评估为nil
; 请注意,在SELECT
我手动调用之前不会发生x.inspect
:
irb(main):008:0> x = User.where("name like 'bob'"); nil
=> nil
irb(main):009:0> x.inspect
User Load (0.5ms) SELECT "users".* FROM "users" WHERE (name like 'bob')
=> "[]"