Различный результат в рельсах консоли и в путях - PullRequest
0 голосов
/ 08 мая 2020

Когда я использую puts(@participantt = Participant.where(id: 1)), тогда в консоли я получаю

  Participant Load (0.3ms)  SELECT "participants".* FROM "participants" WHERE "participants"."id" = $1  [["id", 1]]
  ↳ app/controllers/interviews_controller.rb:119:in `puts'
#<Participant:0x000000000c778bf0>

Но если я набираю @participantt = Participant.where(id: 1) в консоли rails, я получаю

  Participant Load (0.7ms)  SELECT "participants".* FROM "participants" WHERE "participants"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 11]]
=> #<ActiveRecord::Relation [#<Participant id: 1, name: "Ram", email: "Ram@g.com", created_at: "2020-05-08 08:19:00", updated_at: "2020-05-08 08:19:00">]>

Почему это так? ?

1 Ответ

1 голос
/ 08 мая 2020

puts вызывает to_s перед печатью переданного ему результата выражения (которое будет объектом). Обычно он печатает имя класса с его идентификатором объекта.

Здесь результат @participant = Participant.where(id: 1) - это участник с идентификатором и сохраняется в переменной экземпляра @participant

Передача @participant в puts сначала вызовет @participant.to_s перед его печатью.

В случае только @participant = Participant.where(id: 1), консоль покажет результат, типичный для утилиты REPL. И если вы сделаете puts @participant там после этого, вы снова получите то же самое, что и puts в вашем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...