Frage

Ich weiß, dass Sie benannte Scopes in Rails erstellen können, mit denen Sie Bedingungen angeben können, die dann später aufgebaut werden können:

named_scope :active, :conditions => {:active => true}

...

MyModel.active.find(...)

Dies erstellt ein Proxy -Objekt, das erst später bewertet wird. Was ich wissen möchte, ist, ob es möglich ist, eine Dynamik zu erstellen unNamensfernrohr genannt?

Damit meine ich, gibt es eine Methode 'foo', mit der ich gehen kann

scope = MyModel.foo(:conditions => {:target_id => 4})

und dann passieren scope als Proxy -Objekt, das ich mehr tun kann .finds oder andere Scoped -Anrufe?

War es hilfreich?

Lösung

Ja, überprüfen Sie Anonyme Bereiche:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top