Если у вас есть Rails 3+, рассмотрите возможность использования нового синтаксиса AREL для некоторых ваших запросов:
records = Car.where(:doors => 4, :type => "sedan")
records = records.where("color NOT LIKE ?", "%black%")
Но если вы все еще используете Rails 2.3, то синтаксис выглядит следующим образом:
clauses = ["doors = ?", "type = ?"]
conditions = [4, 'sedan']
if some_reason
clauses << "color NOT LIKE ?"
conditions << "%robert%"
end
Cars.find(:all, :conditions => [clauses.join(" AND" ), *conditions])
Определенно более раздражает, чем синтаксис AREL.
Дополнительным преимуществом этого синтаксиса является то, что когда ActiveRecord заменяет ?
, он будет очищать входные данные для внедрения SQL.