У меня есть модель вопроса и модель ответа. В представлении «Показ вопросов» я использую цикл для отображения всех ответов на заданный вопрос. Я хочу включить голосование по этим ответам. Я использую гем act_as_votable.
Вот ошибка, которую я получаю при загрузке "/questions/1":
No route matches {:action=>"upvote", :controller=>"answers", :id=>nil, :question_id=>"1"} missing required keys: [:id]
Похоже, что ответ :id не обнаруживается и, следовательно, не находит соответствующий маршрут (например, /questions/1/answers/1/like). Что я здесь делаю неправильно?
Странно то, что голосование отлично работает в индексном представлении ответов, используя тот же код. Поэтому я подозреваю, что это что-то о попытке использовать этот код через контроллер вопросов и представления. Это, вероятно, очевидная проблема, но спасибо за любые советы!
Мои вложенные маршруты:
resources :questions do
resources :answers do
member do
put 'like', to: 'answers#upvote'
put 'dislike', to: 'answers#downvote'
end
end
end
Контроллер моих ответов - действия по голосованию за/против:
def upvote
@question = Question.find(params[:question_id])
@answer = @question.answers.find(params[:id])
@answer.upvote_by current_user
redirect_to question_answers_path(@question)
end
def downvote
@question = Question.find(params[:question_id])
@answer = @question.answers.find(params[:id])
@answer.downvote_by current_user
redirect_to question_answers_path(@question)
end
Представление «Мои вопросы» (в конце концов я сделаю это частичным)
<% @question.answers.each do |answer| %>
<li class="answer-item">
<div class="answer-description">
<%= answer.description %>
</div>
<div class="vote">
<div class="col-xs-3">
<%= link_to 'UP', like_question_answer_path(@question, answer), method: :put %>
</div>
<div class="col-xs-9">
</div>
</div>
</li>
Мои маршруты:
like_question_answer PUT /questions/:question_id/answers/:id/like(.:format) answers#upvote
dislike_question_answer PUT /questions/:question_id/answers/:id/dislike(.:format) answers#downvote
question_answers GET /questions/:question_id/answers(.:format) answers#index
POST /questions/:question_id/answers(.:format) answers#create
new_question_answer GET /questions/:question_id/answers/new(.:format) answers#new
edit_question_answer GET /questions/:question_id/answers/:id/edit(.:format) answers#edit
question_answer GET /questions/:question_id/answers/:id(.:format) answers#show
PATCH /questions/:question_id/answers/:id(.:format) answers#update
PUT /questions/:question_id/answers/:id(.:format) answers#update
DELETE /questions/:question_id/answers/:id(.:format) answers#destroy
questions GET /questions(.:format) questions#index
POST /questions(.:format) questions#create
new_question GET /questions/new(.:format) questions#new
edit_question GET /questions/:id/edit(.:format) questions#edit
question GET /questions/:id(.:format) questions#show
PATCH /questions/:id(.:format) questions#update
PUT /questions/:id(.:format) questions#update
DELETE /questions/:id(.:format) questions#destroy