目前我有两种型号:费率和项目
评分是一种投票模式,投票和 player_id
评价has_many:投票 投票belongs_to:rate
此外,对于Item模型,目前我的范围如下:
scope :pop, proc { order('votes.votes DESC') }
按投票对所有项目进行排序。
问题是:我需要通过player_id收集已排序的项目(Item.all.pop) AND 类似的东西:Item.all.pop(player_id)
怎么做?
更新
rate.rb
class Rate < ActiveRecord::Base
belongs_to :player
belongs_to :item
end
item.rb的
class Item < ActiveRecord::Base
has_many :rates
scope :pop, proc { order('rates.votes DESC') }
end
答案 0 :(得分:2)
更新:(基于更新后的评论和评论澄清)
你可能想要这样的东西:
scope :pop, order('stats.votes DESC')
scope :for_player, lambda{|player| joins(:rates).where(:player_id => player.id)}
然后你应该可以致电Item.for_player(@my_player).pop
。
免责声明:我不善于建立积极的记录查询,所以上面可能需要一些调整......
(原始答案)
你可能想要这样的东西:
scope :pop, order('stats.votes DESC')
scope :by_player, group('player_id')
然后,你应该能够Item.by_player.pop
得到你想要的东西。 (您可以使用Item.by_player.pop.to_sql
检入控制台,以查看是否生成了预期的SQL查询。)