我正在尝试显示当前用户我喜欢的所有帖子。
我正在使用 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/