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 .finds ou outras chamadas com escopo?

Foi útil?

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
scroll top