Rails 3 Beta 4上的“to_sql”出错

时间:2010-06-21 04:06:19

标签: ruby-on-rails

我在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工作得非常简单 情况下。

1 个答案:

答案 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