2015-06-04 5 views
2

У меня есть следующая область действия на моей модели.Странные результаты с модельной областью

class ProgrammeInstance < ActiveRecord::Base 
    # more code 

    scope :published, -> { where(published: true) } 
    scope :order_by_start_date, -> { order(:start_date) } 
    scope :future_with_offset, -> { where("start_date >= ?", Date.today - 7.days) } 
    scope :upcoming_with_offset, -> { future_with_offset.published.order_by_start_date } 

    # more code 
end 

я использовал возможности для запроса списка вернулся из рельсов

programme_instances.upcoming_with_offset 

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

programme_instances.future_with_offset.published.order_by_start_date 

Я получаю результаты, возвращенные.

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

Спасибо.

+0

вставить ваши атрибуты –

+0

Что содержимое ваших других областей выглядеть? – fylooi

+0

Просмотреть добавленные области –

ответ

0
class ProgrammeInstance < ActiveRecord::Base 
    scope :future_with_offset, -> { where(condition) } 
    scope :published, -> { where(published: true) } 
    scope :order_by_start_date, order('start_date') 
end 

Вы можете вызвать его в контроллер, как

ProgrammeInstance.future_with_offset.published.order_by_start_date 
+0

Спасибо. Это имеет смысл, как я сказал в вопросе. Я спрашиваю, почему первый способ не работает. –

+0

Это не ответ. Я уже сказал - почему вы не можете вложить свои области, как в приведенном выше случае. Я думал, что это возможно? –

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