thumbs_up gem来排序喜欢发布的 - rails

时间:2013-10-07 23:04:16

标签: ruby-on-rails ruby ruby-on-rails-4

我正在使用thumbs_up gem来让用户喜欢设计和产品。在用户个人资料中,我展示了用户喜欢的所有设计和产品。现在,我已将设计和产品连接到一个视图中,但他们为设计+产品订购了'created_at DESC'。我想根据用户投票的时间来订购,所以当用户在设计上投票时,它首先在他们的个人资料上。这是我的代码

在模型中

def favorites
  Design.joins(:votes).where('voter_id = ?', self.id).where('voteable_type = ?', 'Design').where('vote = ?', true)
end

def favs
  Product.joins(:votes).where('voter_id = ?', self.id).where('voteable_type = ?', 'Product').where('vote = ?', true)
end
控制器中的

@user = User.find_by_username(params[:id])
@designs = @user.favorites
@products = @user.favs

@favorites = @designs.to_a.concat @products.to_a
@favorites.sort! {|t1, t2| t2.created_at <=> t1.created_at}

我甚至已经删除了设计和产品的默认范围,以防出现问题,但它没有解决问题。

我也试过这个没有运气

Design.joins(:votes).where('voter_id = ?', self.id).where('voteable_type = ?', 'Design').where('vote = ?', true).order('created_at DESC')

每个投票都有一个时间戳'created_at'。所以我知道这是可能的。

1 个答案:

答案 0 :(得分:0)

如果用户has_many :votes,投票belong_to :voteable且每个用户只对特定voteable投票一次,我会尝试这样的事情:

@user.votes.includes(:voteable).order('created_at DESC')

这将返回按创建日期排序的投票集合。然后,您可以迭代它们并显示它们所需的voteable属性。如果您只想要设计而不是产品,则需要进行联接,而不是includes并按voteable_type过滤