#ruby-on-rails
#ruby-on-rails
Вопрос:
Я пытаюсь создать свои условия следующим образом:
conditions = {}
conditions[:doors] = 4
conditions[:type] = "sedan"
Cars.find(:all, :conditions=>conditions)
Как бы я добавил к своим условиям условия «LIKE»:
conditions[:color] NOT LIKE '%black%'
Ответ №1:
Если у вас 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-инъекции.