2015-09-02 2 views
0

У меня есть модель user.rb и касается query_filter.rb.
Доступ к запросу в модуле метода поддержки

module QueryFilter 
    extend ActiveSupport::Concern 

    def apply(attr) 

    end 

end 

class User < ActiveRecord::Base 
    extend QueryFilter 
end 

Я хотел бы применить фильтры для всей модели или для запроса.
Например:

> User.apply(attributes) 
=> #query 
> User.where(sex: 'male').apply(attributes) 
=> #query 

У меня есть две проблемы.
Прежде всего, я не знаю, как я могу получить доступ к запросу, по которому я вызвал свой метод в модульном методе?
Во-вторых User.apply(attributes) не работает, я могу использовать User.all.apply(attributes), но это не тот случай. Есть ли возможность вызвать метод сразу после имени класса или запроса?

ответ

0

Вы должны include QueryFilter вместо extend

http://api.rubyonrails.org/classes/ActiveSupport/Concern.html см

Но я думаю, что для желаемого эффекта вы должны смотреть в scopes больше проблем.

+0

Это не помогает ни с чем, если я использую include, я могу вызвать свой метод на одном объекте ... Я хочу вызвать его по запросу или целому классу – Gregy

+0

ах вы правы, мне нужно включить его, а затем добавить мой метод, относящийся к модулю ClassMethods, но все же я не могу получить доступ к отношению, на котором я назвал этот метод. – Gregy

+0

Я боюсь, что это совершенно неправильный подход для этого - поскольку 'where' не возвращает объект' User'. –

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