Я пытаюсь добавить голоса к комментариям в моем приложении блога.Но я не могу отправить переменную в цикле ниже на контроллер:
<% @comments.each do |c| %>
<h1><%= c.title %></h1>
<p><%= c.content %></p>
<p><%= c.user.username %></p>
<% if current_user.id == c.user_id %>
<%= link_to "Edit", edit_comment_path(@post, c)%>
<%= link_to "Delete", delete_comment_path(@post, c), method: :delete, data: { confirm: "Are you sure?" }%>
<% end %>
<% if current_user.id != c.user_id %>
<p>Review this comment</p>
<%= link_to like_path(c), method: :put do %>
Upvote
<%= c.upvote %>
<% end %>
<%= link_to dislike_path(c), method: :put do %>
Downvote
<%= c.downvote %>
<% end %>
<% end %>
<% end %>
контроллер:
...
def upvote
object_comment = Comment.find(@comment.id)
object_comment.increment!(:upvote)
redirect_to show_path(@post)
end
def downvote
object_comment = Comment.find(@comment.id)
object_comment.increment!(:downvote)
redirect_to show_path(@post)
end
....
Маршруты:
Rails.application.routes.draw do
....
#Comments
post '/post/:post_id', to: 'comment#create', as: 'new_comments'
get '/post/:post_id/:comment_id/edit', to: 'comment#edit', as: 'edit_comment'
put '/post/:post_id/comment/:comment_id', to: 'comment#update', as: 'update_comment'
delete '/post/:id/:comment_id/', to: 'comment#destroy', as: 'delete_comment'
put 'like', to: "comment#upvote", as: 'like'
put 'dislike', to: "comment#downvote", as: 'dislike'
end
Я хотел бы получить 'c', указанный в каждом цикле, как переменную в методах upvote и downvote, чтобы заменить @comment в object_comment = Comment.find (@ comment.id), чтобы увеличить число голосов.Это возможно?
Как правильно, я, очевидно, получаю следующую ошибку:
NoMethodError (неопределенный метод "id" для nil: NilClass):