Rails3范围的两个参数

时间:2011-06-20 19:44:30

标签: mysql ruby-on-rails named-scope

目前我有两种型号:费率和项目

评分是一种投票模式,投票 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

1 个答案:

答案 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查询。)