我有一个模型“Thing”,其中每个都有很多“评论”,其中每一个都有很多“投票”。我希望能够对Thing show页面上的评论进行投票。这就是我到目前为止所做的:
评论控制器:
def votecomment
@comment = Comment.find(params[:id])
Vote.create!(voteable_id: params[:id], voteable_type: 'Comment')
redirect_to current_thing
end
事物观点:
<%= link_to “Vote”, vote_comment_path(:id => comment.id), method: :post %>
路线:
post 'comments/:id/vote' => 'comments#vote', as: 'vote_comment'
但我收回了这个错误:
NameError in CommentsController#votecomment
undefined local variable or method `current_thing' for #<CommentsController:0x007f98efa69c00>
我尝试将方法移动到Things控制器,但我得到了完全相同的错误类型。
我做错了什么?
答案 0 :(得分:2)
假设您在comment.rb
中有以下关系belongs_to :thing
您可以使用@comment.thing
访问评论的事物对象。由于redirect_to接受对象,你可以做
redirect_to @comment.thing
答案 1 :(得分:1)
你必须明白,如果你熟悉devise并且你看到ex current_user这就是gem中的一个方法,而不是你创建的每个模型的填充方法,你必须知道没有任何东西叫做current_thing。
所以,如果你想要这样的东西,你可以在你的application_controller或者甚至是应用程序帮助器中添加方法来获取current_thing
def current_thing
Thing.find() --> or whatever the way you get that current thing.
end