Отображение электронной почты человека, которому я отправил комментарий - PullRequest
0 голосов
/ 17 апреля 2020

Я использую следующий код, чтобы показать адрес электронной почты человека, которому я отправил комментарий.

Контроллер:

@to_user = User.where(id: @comment.to_id) 

Просмотр:

<%= @to_user.email  %>

Только выдает ошибку: undefined method `email' for #<User::ActiveRecord_Relation:0x007feb364b8218>

Отображение «от» пользователя работает хорошо :

<%= @comment.user.email %>

Не уверен, что я делаю не так. Помощь будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Чтобы получить отдельный объект , вы используете find:

@to_user = User.find(@comment.to_id) 

Но для определения * это идиоматизм c 1010 * ассоциация в вашей Comment модели, например:

class Comment < ActiveRecord::Base
  belongs_to :to_user, class_name: 'User', foreign_key: 'to_id'
  # ...
end

Это позволяет вам просто написать:

<%= @comment.to_user.email %>

Чтобы избежать путаницы, вы можете переименовать от user до from_user. Или, может быть, использовать более описательные имена, такие как sender и receiver.

. Если вы это сделаете, было бы неплохо также переименовать столбцы с user_id и to_id на from_user_id и to_user_id (или sender_id и receiver_id).

1 голос
/ 17 апреля 2020

.where возвращает ActiveRecord_Relation, который можно представить себе как массив записей (на самом деле записи еще не загружены, но как только вы вызываете метод, такой как .each или .to_a он оценивает запрос и превращает его в массив).

Вам нужно либо

  • .find (User.find(@comment.to_id) ) - это вызовет ошибку, если пользователь не найден
  • .find_by (User.find_by(id: @comment.to_id)) - это вернет ноль, если пользователь не найден

Вы также можете просто вызвать .first для результата .where - как это часто бывает в Ruby / Rails, есть много способов сделать то же самое.

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