如何显示用户喜欢的所有帖子
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 约定保持一致,并有助于您在处理集合或单个对象时轻松识别。
我正在尝试显示当前用户点赞的所有帖子。
我在 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 约定保持一致,并有助于您在处理集合或单个对象时轻松识别。