Два параметра для области Rails3 - PullRequest
3 голосов
/ 20 июня 2011

В настоящее время у меня есть две модели: Оценить и пункт

Оценить - это модель для голосования, и есть голосов и player_id

Оценить has_many: голосов Голосовать принадлежит_: Оценить

Кроме того, для модели предмета, в настоящее время у меня есть область видимости:

scope :pop, proc { order('votes.votes DESC') }

чтобы отсортировать все предметы по голосу .

Вопрос: мне нужно собрать отсортированные предметы (Item.all.pop) И по player_id Что-то вроде: 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 Ответ

2 голосов
/ 21 июня 2011

ОБНОВЛЕНИЕ: (основано на обновлении постов и пояснениях к комментариям)

Возможно, вы хотите что-то вроде этого:

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.)

...