У меня есть 3 модели: Вопросы, Ответы и Профили (я знаю, это должно называться «Пользователи»). Когда вы просматриваете вопрос Q, я запрашиваю в базе данных ответы на Q. (Они связаны по идентификатору.) В представлении текущий пользователь имеет возможность удалить свой ответ, щелкнув ссылку уничтожения, отображаемую рядом с его ответом. :
%table
%tr
%td
Answers:
- @answers.each do |a|
%tr
%td
- @provider = Profile.find(a.provider)
%i
#{h @provider.username} said:
%br
#{h a.description}
%td
= link_to 'View full answer', a
%td
- if a.provider == @profile.id
#{link_to 'Delete my answer', a, :confirm => 'Are you sure?', :method => :delete}
Проблема в том, что когда пользователь нажимает на ссылку уничтожения, он перенаправляется в / answers / index. Я хочу, чтобы он перенаправил в / questions / Q. Какой лучший способ сделать это?
Я знаю, что есть метод redirect_to
, но я не знаю, как реализовать его, когда я хочу перенаправить на действие для другого контроллера. Также необходимо запомнить вопрос, ответ на который удаляется.
Я попытался передать что-то вроде: question_id в link_to как:
#{link_to 'Delete my answer', a, :confirm => 'Are you sure?', :question_id => @question.id, :method => :delete}
В ответе контроллера # destroy:
def destroy
@answer = Answer.find(params[:id])
@answer.destroy
respond_to do |format|
format.html { redirect_to(answers_url) }
format.xml { head :ok }
end
@question = Question.find(params[:question_id])
redirect_to question_path(@question)
end
Информация: question_id не передается в метод уничтожения, поэтому я получаю эту ошибку:
Couldn't find Question without an ID
Для подтверждения я добавил puts
вызов до Question.find
, и он вернул nil
.
Я также пытался сохранить идентификатор вопроса в информации о сеансе. AnswerSontroller # уничтожить изменения для вызова сеанса [: question_id] вместо params [: question_id]. Но я получаю другую ошибку:
Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".
Я не уверен, как обратиться к ошибке. Куда мне положить return
?
Любая помощь будет оценена !!