2015-01-12 4 views
0

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

Вот модель:

class Stats < ActiveRecord::Base 
    scope :by_latest_date, ->{select("date, sum(users) AS users, 
            sum(clicks) AS clicks").group("date").limit(1)} 
end 

Область: by_latest_date должна возвращать суммы пользователей и кликов за последний день записи. Но когда я называю его от контроллера:

class ChartsController < ApplicationController 
    def user_stats 
     @stats = Stats.by_latest_date 
    end 
end 

@stats просто устанавливается в ноль, когда есть записи в базе данных. Когда в базе данных нет записей, устанавливается пустой массив.

Я не понимаю, почему. Код работал, когда я копировал/вставлял запрос области в контроллер, а также работал, когда я ставил Stats.by_latest_date непосредственно в свой тест RSPEC. Возможно, что-то особенное в контроллерах и блоках видимости? Но если есть, я не смог бы найти его.

+0

Вам не хватает ',' перед тощей стрелкой ?, он должен разорвать тест, хотя ... – kurenn

+0

yep, он есть в моей программе, поэтому я добавил его к вопросу. Код здесь перефразирует, а не точно копирует мой код. –

+0

Вы пытаетесь использовать лямбду вместо ловкой стрелы или даже поместить ее в классный метод? – kurenn

ответ

0

Я думаю, вы пытаетесь получить область, чтобы сделать что-то, что она не предназначена для этого, она предназначена для определения области базовой модели, а не агрегации. Может быть проще просто создать метод. Сначала запустите его в консоли, как вы это сделали, а затем поместите в класс.

В качестве стороннего - дата даты (как в момент времени) - если это временная метка, тогда группировка будет не по фактической дате, а по метке времени, так что вы можете получить только последний.

Группировка будет заказывать данные в любом случае, поскольку она должна собирать ее вместе - но, возможно, не в правильном порядке, вы уверены, что получаете то, что хотите?

Смежные вопросы