2

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

我正在使用 Ruby on Rails,以及 Gems Devise 和“Acts As Votable”。我一直在遵循Acts As Votable 指南,但无法使其发挥作用。

我认为这是要走的路:

@post.liked_by @user1
@post.downvote_from @user2

我创建了一个名为仪表板的新控制器:

class DashboardController < ApplicationController
  def index
        @post = Post.all.liked_by current_user
  end
end

但是当我运行我的网络时,我得到:

undefined method `liked_by' for #<Post::ActiveRecord_Relation:0x9aa89b0>

我能做些什么?

4

2 回答 2

2

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

于 2016-05-25T22:18:58.760 回答
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

这将对所有帖子应用点赞和反对票。但是,您只能更新第一篇文章,如下所示:

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 约定保持一致,并帮助您轻松识别何时使用集合或单个对象。

于 2016-05-25T22:37:10.813 回答