Объединение условий в находке. (Направляющие)

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

@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])
1
задан Prateek 9 July 2010 в 14:22
поделиться

2 ответа

Было бы лучше вообще не использовать это условие, чем использовать *. В этом случае это просто, поскольку все ваши операторы сравнения - "=". Это означает, что вы можете использовать хеш-форму условий. Ваш код также довольно неэффективен, поскольку вы загружаете один и тот же объект отчета 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
ответ дан 2 September 2019 в 23:10
поделиться
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
                                       ]
                       )
1
ответ дан 2 September 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: