我在Ruby 1.9.2-head上测试Rails 3 beta 4,当我开始测试时 控制台并执行:
Game.first.to_sql
我收到此错误:
ArgumentError: wrong number of arguments (0 for 1)
我知道它可以找到游戏记录,因为当我输入:
Game.first
它返回:
=> #<Game id: 1, name: "Galaga", created_at: "2010-06-19 11:02:37",
updated_at: "2010-06-19 11:02:37">
我错过了什么?我只是想让to_sql工作得非常简单 情况下。
答案 0 :(得分:2)
当您运行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 :: Relation上运行.first
时,它运行以下内容(与我向您展示的内容相同):
def find_first
if loaded?
@records.first
else
@first ||= limit(1).to_a[0]
end
end