Мои навыки 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