Сочетая условия в поиске.(Rails) - PullRequest
1 голос
/ 09 июля 2010

Теперь я ввожу некоторые данные из формы, и у меня есть код для поиска в базе данных, вводящий несколько параметров в качестве условий ввода.Теперь, если один из параметров равен нулю (т. Е. Поле не проверено), мне нужно заменить этот параметр на что-то, скажем *, чтобы на поисковый запрос не влияли.Как бы я это сделал?

@report = Problem.find(:all, :conditions => ["problems.cause_id = ? and problems.location_id = ? and problems.device_id = ? and problems.priority_id = ?", Report.find_by_id(params[:id]).cause_id, Report.find_by_id(params[:id]).location_id, Report.find_by_id(params[:id]).device_id, Report.find_by_id(params[:id]).priority_id])

Ответы [ 2 ]

1 голос
/ 09 июля 2010

Было бы лучше вообще не иметь этого условия, чем использовать *.В этом случае все просто, так как все ваши операторы сравнения - "=".Это означает, что вы можете использовать хэш-форму условий.Ваш код также довольно неэффективен, так как вы загружаете один и тот же объект отчета 3 или 4 раза.Ваш вопрос о том, что один из параметров является нулевым, не имеет смысла по этой причине: вы просто используете один и тот же параметр снова и снова.Также вы устанавливаете переменную с именем @report в качестве объекта проблемы, который сбивает с толку.

@report = Report.find_by_id(params[:id])
conditions = {:cause_id => @report.cause_id, :location_id => @report.location_id, :device_id => @report.device_id, :priority_id => @report.priority_id}
conditions.delete_if{|k,v| v.blank?}
@problem = Problem.find(:all, :conditions => conditions)
1 голос
/ 09 июля 2010
rep = Report.find_by_id(params[:id])
cause = rep.cause_id ? rep.cause_id : '*'
location = rep.location_id ? rep.location_id : '*'
device = rep.device_id ? rep.device_id : '*'
priority = rep.priority_id ? rep.priority_id : '*'
@report = Problem.find(:all, 
                       :conditions => ["problems.cause_id = ? and 
                                        problems.location_id = ? and
                                        problems.device_id = ? and 
                                        problems.priority_id = ?",
                                        cause, location, 
                                        device, priority
                                       ]
                       )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...