我正在使用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'。所以我知道这是可能的。
答案 0 :(得分:0)
如果用户has_many :votes
,投票belong_to :voteable
且每个用户只对特定voteable
投票一次,我会尝试这样的事情:
@user.votes.includes(:voteable).order('created_at DESC')
这将返回按创建日期排序的投票集合。然后,您可以迭代它们并显示它们所需的voteable
属性。如果您只想要设计而不是产品,则需要进行联接,而不是includes
并按voteable_type
过滤