named_scope для суммы столбца в связанной таблице - PullRequest
1 голос
/ 29 марта 2011

Мои навыки SQL в лучшем случае смешны, поэтому Rails и ActiveRecord делают мою жизнь намного проще.На этот раз, однако, это, вероятно, представляет собой костыль, который мешает мне понять, что происходит в бэк-энде, чтобы знать, что кормить named_scope.

Я пытаюсь вернуть 10 лучших записей таблицыкоторые представляют самые высокие оценки "актеров" в игре.Оценка рассчитывается через Actor> Acts> Decsisons.point_value

. Я могу достаточно легко получить оценку для любого отдельного актера, но объединения и сумма выше моего понимания SQL, чтобы охватить его для 10 лучших извся база данных.

Вот модель актера, которая у меня есть на данный момент:

class Actor < ActiveRecord::Base
  has_many :acts, :dependent => :destroy
  has_many :decisions, :through => :acts, :order => 'created_at'

  named_scope :high_scores, {
    :conditions => {:finished => true}, 
    :joins => "INNER JOIN acts ON actor.id = acts.actor_id INNER JOIN decisions on decision.id = decision.act_id", 
    :group => 'actor.id',
    :select =>'actors.*, SUM(acts.decisions.point_value) AS score', 
    :order => "score DESC", 
    :limit => 10
  }

end

После того, как я опробовал несколько вещей, основанных на некоторых постах здесь и на некоторых других сайтах, яочевидно, не понимая, что происходит или что named_scope необходимо для соединения точек.Некоторая ясность будет высоко ценится.Спасибо.

* Редактировать: Обновлен named_scope до того, что у меня сейчас есть

Это теперь дает мне следующую ошибку:

Mysql :: Ошибка: Неизвестный столбец 'действует.decisions.point_value 'в' списке полей ': ВЫБЕРИТЕ актеров. *, SUM (acts.decisions.point_value) AS оценка ОТ actors INNER JOIN действует ON actor.id = acts.actor_id INNER ПРИСОЕДИНЯЙТЕСЬ к решениям на Solution.id = Solution.act_id WHERE (actors. finished = 1) GROUP BY actor.id ЗАКАЗАТЬ ПО счету DESC LIMIT 10

1 Ответ

0 голосов
/ 31 марта 2011

Вместо этого установите итоговые оценки в столбце таблицы, так как это выглядит менее ресурсоемким.

...