我正在尝试显示当前用户喜欢的所有帖子。
我正在使用Ruby on Rails,以及宝石Devise和“Acts As Votable”。我一直关注the Acts As Votable guide,但无法使其发挥作用。
我认为这是要走的路:
@post.liked_by @user1
@post.downvote_from @user2
我创建了一个名为dashboard的新控制器:
class DashboardController < ApplicationController
def index
@post = Post.all.liked_by current_user
end
end
但是当我运行网络时,我得到了:
undefined method `liked_by' for #<Post::ActiveRecord_Relation:0x9aa89b0>
我该怎么办?
答案 0 :(得分:2)
在您的控制器中尝试@posts = current_user.find_up_voted_items
并将acts_as_voter
放入您的用户模型中。
答案 1 :(得分:2)
问题在于您在ActiveRecord关系上调用它,而不是在模型对象本身上调用它。一些微小的变化,你将全部完成。
首先,我们将实例变量设为复数,以表明它接收多条记录(用户可以喜欢多个帖子):
class DashboardController < ApplicationController
def index
@posts = Post.all.liked_by current_user
end
end
然后,要处理这些,您需要导航到单个记录或记录。如果要处理整个列表,可以执行以下操作:
@posts.each do |post|
post.liked_by @user1
post.downvote_from @user2
end
这将对所有帖子应用like和downvote。但是,您只能更新第一篇文章,如下所示:
post = @posts.first
post.liked_by @user1
post.downvote_from @user2
如果您已经知道要投票的帖子(可能基于在UI中选择的帖子),您可以这样做:
@post = Post.find_by(params[:id])
@post.liked_by @user1
@post.downvote_from @user2
确保将复数和单数名称保持不同将有助于您与Rails惯例保持一致,并帮助您轻松识别何时使用集合或单个对象。