Rails 5 пользовательский запрос в методе show с find и где - PullRequest
0 голосов
/ 30 июня 2018

Прошу прощения за неуклюжий вопрос. У меня есть метод индекса, который ограничивает объекты current_user, и это прекрасно работает, но я все еще могу получить доступ к объекту в методе show.

Это покажет только объекты current_user

def index
  @todo_lists = TodoList.where(user_id: current_user)
end

это, к сожалению, по-прежнему разрешает доступ к объекту, если вы знаете идентификатор

def show
  @todo_list = TodoList.find(params[:id])
end

Что я пытаюсь сделать, но дает undefined method where Ошибка

def show
  @todo_list = TodoList.find(params[:id]).where(user_id: current_user)
end

1 Ответ

0 голосов
/ 30 июня 2018

Вы должны «чередовать» свой текущий запрос. Поскольку find возвращает один объект, соответствующий запрашиваемой модели / таблице. В то время как где предназначено для использования в модели и возвращает экземпляр ActiveRecord::Relation, это именно то, что вам нужно, чтобы найти свой TodoList по идентификатору.

После этого вы можете использовать find, которая найдет одну сущность (одну запись) и вернет ее как экземпляр модели.

Попробуйте:

TodoList.where('user_id = ?', current_user).find(params[:id])

Обратите внимание: если current_user является экземпляром пользователя, предполагая, что у него много продуктов, вы можете использовать эту ассоциацию для получения всех продуктов, а затем найти тот, который вам нужен:

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