Rails - Построение условного оператора - PullRequest
1 голос
/ 05 октября 2011

Я пытаюсь построить свои условия так:

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

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

Как бы я добавил к своим условиям условия LIKE:

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

1 Ответ

2 голосов
/ 05 октября 2011

Если у вас есть 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...