Ошибка с “to_sql” на направляющих 3 беты 4

Я тестирую направляющие 3 беты 4 на Ruby, с 1.9.2 головами, и когда я запускаю консоль и делаю:

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
задан MattSlay 21 June 2010 в 04:06
поделиться

1 ответ

Когда вы выполняете 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">

Когда вы копаетесь в источнике, когда вы выполняете . first на ActiveRecord::Relation выполняется следующее (то же самое, что я вам показал):

def find_first
  if loaded?
    @records.first
  else
    @first ||= limit(1).to_a[0]
  end
end
2
ответ дан 2 September 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: