代码之家  ›  专栏  ›  技术社区  ›  MattSlay

Rails 3 Beta 4上的“to_SQL”错误

  •  1
  • MattSlay  · 技术社区  · 14 年前

    我正在Ruby1.9.2-head上测试Rails3 beta 4,当我启动 控制台和DO:

    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 回复  |  直到 14 年前
        1
  •  2
  •   Garrett    14 年前

    当你奔跑 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