Rails делает поиск с условиями? - PullRequest
1 голос
/ 18 октября 2010

В Rails 3 я создал форму поиска, которая выполняет НАЙТИ с условиями в файле Models.

  @projects = find(:all,
                :select => 'projects.*',
                :conditions => ['name = ?', search_name]
                ).first

Это прекрасно работает, если имя указано в форме поиска (search_name). Проблема в том, что search_name пусто, ошибки Rails (не могу сказать, что я виноват) ...

Каков умный способ справиться с этой ситуацией? Я хотел бы, чтобы search_name было пустым, чтобы не было ошибки, а возвращалось все.

Предложения? Спасибо!

Ответы [ 3 ]

5 голосов
/ 19 октября 2010

Вы можете создать область, чтобы справиться с этим.В вашей модели Project добавьте что-то вроде:

scope :search_by(name), lambda{|name| first.where(:name => name) unless name.blank?}

, затем в вашем контроллере просто позвоните:

Project.search_by(params[:search])

EDIT:

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

область: search_by (имя), лямбда {| имя |first.includes (: owner) .where ("projects.name LIKE? ИЛИ owner.name LIKE?", name, name), если только name.blank?}

3 голосов
/ 18 октября 2010
if search_name.blank?
  @projects = Project.order(:name)
else
  @projects = Project.where(:name => search_name)
end
1 голос
/ 19 октября 2010

Самый чистый способ - использовать отложенную загрузку с новыми функциями ActiveRecord, такими как:

@ projects = Project.order (: имя) @projects = @ projects.where (: name => search_name), если search_name

Вы можете добавить столько условий, сколько захотите. Они не будут выполнены до тех пор, пока вам не понадобятся результаты (с @ projects.all или @ projects.each и т. Д ...)

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