2011-10-05 5 views
1

Je suis en train de construire mes conditions comme ceci:Rails Bâtiment - Déclaration conditionnelle

conditions = {} 
conditions[:doors] = 4 
conditions[:type] = "sedan" 

Cars.find(:all, :conditions=>conditions) 

Comment pourrais-je ajouter à mes conditions pour des conditions 'LIKE':

conditions[:color] NOT LIKE '%black%' 

Répondre

2

Si vous avez Rails 3+ envisager d'utiliser la nouvelle syntaxe de AREL pour certains de la construction de votre requête:

records = Car.where(:doors => 4, :type => "sedan") 
records = records.where("color NOT LIKE ?", "%black%") 

Mais si vous utilisez toujours Rails 2.3 puis la la syntaxe ressemble à:

clauses = ["doors = ?", "type = ?"] 
conditions = [4, 'sedan'] 

if some_reason 
    clauses << "color NOT LIKE ?" 
    conditions << "%robert%" 
end 



Cars.find(:all, :conditions => [clauses.join(" AND"), *conditions]) 

Certainement plus ennuyeux que la syntaxe AREL.

Un avantage secondaire de cette syntaxe est que lorsque ActiveRecord remplace le ?, il désinfecte les entrées pour l'injection SQL.

Questions connexes