ruby-on-rails - 如何显示用户喜欢的所有我的帖子

标签 ruby-on-rails ruby devise voting-system acts-as-votable

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

我正在使用 Ruby on Rails,以及 Gems Devise 和“Acts As Votable”。我一直在关注the Acts As Votable guide但无法使其发挥作用。

我认为这是要走的路:

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

我创建了一个名为仪表板的新 Controller :

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

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

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

我能做什么?

最佳答案

问题是您在 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

如果您已经知道要对哪个帖子进行投票(可能基于用户界面中选择的帖子),您可以执行以下操作:

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

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

关于ruby-on-rails - 如何显示用户喜欢的所有我的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37448433/

相关文章:

ruby-on-rails - Rails 中至少有 2 个 DateTime?

ruby-on-rails - 有没有办法在没有 cron 的情况下在设定的时间运行作业,比如预定队列?

ruby-on-rails - 使用 sidekiq 在另一个 worker 内部调用 worker ,

ruby - 使用作为字符串存储在数组中的数学符号

ruby-on-rails - rails : Namespacing vs Engines?

ruby-on-rails - Rails 创建事务

ruby-on-rails - 使用Devise before_action :authenticate_user!不会做任何事情

ruby-on-rails - 无法为 rails 2.3.14 安装 libxml-ruby

javascript - 可以在条形图中合并 2 个条形图 (chart.js)

css - 在 rails 中使用 Bootstrap Sass 时出错