2012-05-02 2 views
2

У меня есть модель под названием «событие», которая имеет область с именем «предстоящий», которая возвращает события, датированные в будущем. В консоли рельсов, всякий раз, когда я печатаюRails scopes - неопределенные методы

Event.upcoming 

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

@events = Event.all 
@events.upcoming 

Я получаю неопределенный метод «предстоящая» ошибки. Области работают только над классом, а не от экземпляров переменных? Спасибо заранее. не Yohann

ответ

13

После того, как вы называете .all, @events больше не ActiveRelation, следовательно, вы не можете назвать область применения на нем.

Итак, Event.where(SOME CONDITIONS).order(ORDERING).upcoming.limit(X) все равно будет работать, но Event.where(SOME CONDITIONS).order(ORDERING).all.upcoming.limit(X) не работает.

+0

отлично! Это решило мои проблемы, спасибо! Также просто добавить к тому, что вы сказали. любые методы, такие как Event.find_all_xxx(), нарушают ActiveRelation, поэтому область действия не будет работать –

11

Вы можете использовать scoped вместо all, чтобы получить активный объект отношения, которое позволит вам цепные прицелам на переменном после того как она была установлена:

@events = Event.scoped 
@events.upcoming 
+0

отличная помощь, thx Beerlington. Я должен был дать «правильный» ответ на @zsquare, хотя, потому что у него есть объяснение, почему это происходит. Thx снова! –

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