Рельсы 3, соединяющие несколько, где условие - PullRequest
1 голос
/ 29 декабря 2011

Хотел бы построить рельсы для запроса активной записи с несколькими необязательными условиями где.

Пример:

У меня есть форма поиска пациентов, которая может выполнять поиск по идентификатору, имени и адресу электронной почты. Псевдокод будет выглядеть следующим образом:

where_sql = ""
where_sql = {'name = ?", params[:name]} if params[:name]
where_sql = {'id = ?", params[:id]} if params[:id]
where_sql = {'email = ?", params[:email]} if params[:email]

Patient.where(where_sql)

Как создать следующие запросы, не беспокоясь о внедрении SQL.

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Если вы используете вопросительный знак "?" заполнители или хэши ActiveRecord автоматически экранирует значения для вас. См. Контрмеры по впрыскиванию в направляющих рельсов http://guides.rubyonrails.org/security.html#sql-injection

Это может быть хорошим вариантом использования самоцвета-ранца (MetaWhere rewrite) https://github.com/ernie/ransack

0 голосов
/ 29 декабря 2011

Если вы используете только равные условия, вы можете сделать это следующим образом:

conditions = {}
conditions[:name] = params[:name] if params[:name]
conditions[:id] = params[:id] if params[:id]
conditions[:email] = params[:email] if params[:email]
Patient.where(conditions)

Кроме того, взгляните на большой поисковый логический камень.

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