0

我正在使用deviseand acts_as_votablegems 来允许用户对帖子投票。我当前的目标是查询用户喜欢的帖子列表。

在 Rails 控制台中环顾四周,我发现当一个帖子在votes_for表格上投票时,会附加包含时间戳、投票权重等信息,voter_id这就是我想要调用的信息。

这是user控制器的样子(user控制器,因为我试图查询users/show页面上的喜欢):

@user = current_user
@links = Link.all

@likes = @links.where.votes_for(:voter_id => @user.id) // line I'm trying to figure out, I reckon it'd look something like this

我肯定会以错误的方式完全解决这个问题,如果是这样的话,我会很感激一些方向。

解释将不胜感激......我正在学习 Rails 的基础知识,并发现它的命名约定令人费解且难以遵循。

4

1 回答 1

1

如果您使用的是设计,我想该current_user方法应该在您的视图中可用,并且您不需要重新分配@user

要了解 ActiveRecord 的工作原理,您可能需要查看此处的文档。

至于链接和voter_id,我认为您的查询应该是这样的:

@likes = Link.where(votes_fors: {voter_id: current_user.id}) # OR Link.where(voter: current_user)

基本上,查询将被转换为一个 SQL 查询,上面写着:

"SELECT * FROM links INNER JOIN votes_fors ON links.id = votes_fors.votable_type='Link' WHERE votes_fors.voter_id = ?" [voter_id, 1]

你明白吗?

更好的方法是使用 ActiveRecord 方法来获取这些集合,例如

class User
  has_many :votes_fors, foreign_key: :voter_id
  has_many :favorites, through: :votes_fors, source: :votable # not really sure of this syntax but it should work I think.
end

有了上述,你应该能够做到:

current_user.favorites这将获取用户投票的所有链接。

于 2016-06-26T02:52:26.650 回答