我目前正在使用 'acts_as_votable' Ruby gem 为基本 Rails 应用程序中的评论提供 Upvote/Downvote 功能。在 comments_controller.rb 中,函数如下所示:
def upvote
@comment = Comment.find(params[:id])
@comment.upvote_by current_user
redirect_to comments_path
end
def downvote
@comment = Comment.find(params[:id])
@comment.downvote_by current_user
redirect_to comment_path
end
在 roputes.rb 中:
resources :comments do
member do
put "like", to: "comments#upvote"
put "dislike", to: "comments#downvote"
end
end
视图中的循环如下所示:
<div class="box">
<% @comment.each do |w| %>
<tr>
<td><b><%= w.title %></b></td><br>
<td><%= w.location %></td><br>
<td><%= w.body %></td><br>
<%= link_to "upvote", like_comment_path(w), method: :put %>
<%= @comment.upvote_by.size %>
<%= link_to "downvote", dislike_comment_path(w), method: :put %>
</tr>
<% end %>
</div>
这没有问题,除了这行代码:
<%= @comment.upvote_by.size %>
这将返回以下错误:
undefined method `upvote_by' for #
<Comment::ActiveRecord_Relation:0x007faa8dbf0560>
我不确定为什么该方法未定义,因为我认为这要么是 gem 内置的方法,要么是 ruby 方法。我也不知道这是否是由于其他原因引发的错误消息,但我不确定这可能是什么。我尝试改用“upvote_from”,但这没有用。如果我删除该行,则应用程序运行良好。
我无法弄清楚还有什么可能导致这种情况,所以我非常感谢这里的一些帮助,谢谢。