Как связать другой идентификатор пользователя с моим входом для этого пользователя? - PullRequest
0 голосов
/ 30 сентября 2019

Другой пользователь публикует проблему, и я могу нажать на эту запись, чтобы увидеть подробности об этой проблеме (не через шоу) и дать рекомендацию. Дело в том, что я не хочу, чтобы моя рекомендация была связана с этой проблемой. Я хочу, чтобы это было связано с этим пользователем. Чтобы сделать это, я попытался:

create
    @recommendation = current_user.recommendations.build(recommendation_params)
    @user = User.where(user: params[:user_id])
    @recommendation.helped_id = @user.id 
end

, где полюбленный_идентификатор должен приравнивать идентификатор этого пользователя. (позже я хочу, чтобы этот пользователь мог видеть все рекомендации, которые ему были даны)

Но появляется ошибка: 1006 *

undefined method `id' for #<User::ActiveRecord_Relation:0x007ff6a9621f68> Did you mean? ids

ОБНОВЛЕНИЕ

Итак, я иду наURL, где проблема этого другого пользователя детализирована этим кодом представления:

<% @users.each do |u| %>
<%= link_to new_recommendation_path(user_id: u.id) do %>

И URL: http://localhost:3000/recommendations/new?user_id=2

Может ли это быть проблемой?

@ user = User.find (params [: user_id]) отлично работает в новом методе для отображения проблемы, но тот же код в возвращаемых методах create не может найти.

Ответы [ 3 ]

0 голосов
/ 30 сентября 2019

Можно продолжать использовать AR Relation, поэтому ваш код будет

    @recommendation = current_user.recommendations.build(recommendation_params)
    @user = User.where(id: params[:user_id]).first
    @recommendation.helped_id = @user.id

Совет. В обоих сценариях, используя User.find или User.where, вам следует позаботиться об исключительных случаях.

  • Используя User.find, если пользователь не существует, будет вызвано ActiveRecord :: RecordNotFound.
  • Используя User.where, если пользователь не существует, тогдаNoMethodError (неопределенный метод id для nil: NilClass) будет вызван.
0 голосов
/ 01 октября 2019

Решением было добавить вложенные ресурсы для пользователя и рекомендации

  resources :users, shallow: true do
    resources :recommendations
  end

И, с точки зрения, передать параметры пользователя и рекомендации на страницу рекомендаций.

<% @users.each do |u| %>
<%= link_to new_user_recommendation_path(u.id, @recommendation) do %>

Тогда @user = User.find(params[:user_id]) работает.

0 голосов
/ 30 сентября 2019

Вы должны использовать метод find, который возвращает объект вместо отношения ...

@user = User.find(params[:user_id])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...