Posso criar um escopo *un *nomeado em trilhos?
-
19-09-2019 - |
Pergunta
Eu sei que você pode criar escopos nomeados em trilhos, que permitem especificar condições que podem ser construídas mais tarde:
named_scope :active, :conditions => {:active => true}
...
MyModel.active.find(...)
Isso funciona criando um objeto proxy que não é avaliado até mais tarde. O que eu quero saber é se é possível criar uma dinâmica unNomeado escopo?
Com o que quero dizer, existe um método 'foo' com o qual eu posso ir
scope = MyModel.foo(:conditions => {:target_id => 4})
e depois passe scope
em torno de um objeto de proxy que eu posso fazer mais .find
s ou outras chamadas com escopo?
Solução
Sim, verifique Escopos anônimos:
def find_products
scope = Product.scoped({})
scope = scope.conditions "products.name LIKE ?", "%#{keywords}%" unless keywords.blank?
scope = scope.conditions "products.price >= ?", minimum_price unless minimum_price.blank?
scope = scope.conditions "products.price <= ?", maximum_price unless maximum_price.blank?
scope = scope.conditions "products.category_id = ?", category_id unless category_id.blank?
scope
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow