如何显示用户喜欢的所有帖子

How to show all my posts liked by user

我正在尝试显示当前用户点赞的所有帖子。

我在 Rails 上使用 Ruby,以及 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>

我能做什么?

尝试在您的控制器中 @posts = current_user.find_up_voted_items 并将 acts_as_voter 放入您的用户模型中。

问题是您是在 ActiveRecord 关系上调用它,而不是在模型对象本身上调用它。进行一些小改动,一切就绪。

首先,我们将实例变量设为复数,以表明它正在接收多个记录(一个用户可以喜欢多个 posts):

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

这将对所有 post 应用点赞和否决票。但是,您只能更新第一个 post,如下所示:

post = @posts.first
post.liked_by @user1
post.downvote_from @user2

如果您已经知道要投票给 post 的内容(可能基于 UI 中选择的内容),您可以这样做:

@post = Post.find_by(params[:id])
@post.liked_by @user1
@post.downvote_from @user2

确保您的复数名称和单数名称不同,这将有助于您与 Rails 约定保持一致,并有助于您在处理集合或单个对象时轻松识别。