Когда вы вызываете where
, он фактически не запрашивает базу данных, он создает объект, который можно преобразовать и запустить в базе данных. Это полезно для дальнейшей модификации запроса перед его выполнением.
Обычно добавляется дополнительный вызов first
или all
, чтобы фактически выполнить запрос и получить результат. (Обратите внимание, что это может быть сделано автоматически, если вы вызовете where
в консоли rails, чтобы можно было распечатать результат)
В вашем случае, похоже, что пользователь должен оценивать фильм не более одного раза, поэтому следующее уместно:
@current_user_rating=@movie.ratings.where(:user_id => current_user).first
РЕДАКТИРОВАТЬ : На самом деле я думаю, что GSto правильно, то, что я написал выше, не похоже на причину вашей неудачи. Сообщение об ошибке фактически жалуется на то, что методы, которые вы пытаетесь вызвать, недопустимы для вызова в массиве объектов. В этом случае first
просто выбирает первый результат и игнорирует любые другие.
Было бы хорошо перепроверить, есть ли у вас фильмы, для которых у одного пользователя есть несколько оценок. На самом деле, я бы порекомендовал добавить проверку, чтобы убедиться, что это не разрешено, если она не предназначена.