当你奔跑
Game.first
您正在返回
Game
对象,而不是
ActiveRecord::Relation
如您所料的对象。
要做你想做的事,你需要做:
Game.limit(1).to_sql
这可以让你在没有
to_sql
并按预期返回对象,尽管它将在数组中,然后可以运行
.first
就好像你想要的一样。
irb(main):004:0> Game.limit(1).to_sql
=> "SELECT `games`.* FROM `games` LIMIT 1"
irb(main):005:0> Game.limit(1).class
=> ActiveRecord::Relation
irb(main):006:0> Game.limit(1)
=> [#<Game id: 1, name: "Galaga", created_at: "2010-06-19 11:02:37", updated_at: "2010-06-19 11:02:37">]
irb(main):007:0> Game.limit(1).first
=> #<Game id: 1, name: "Galaga", created_at: "2010-06-19 11:02:37", updated_at: "2010-06-19 11:02:37">
当你深入到源头,当你奔跑
首先
在ActiveRecord::关系上,它运行以下内容(与我向您展示的内容相同):
def find_first
if loaded?
@records.first
else
@first ||= limit(1).to_a[0]
end
end