开发者

Combining conditions in find. (Rails)

Now i am inputting some data from a form and i have a code to search the database inputting several parameters as input conditions. Now if one the parameters is null (i.e) the field is unchecked i need to replace that parameter with something say * so that the search query is unaffected. How would i do that?

开发者_如何学编程@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])


It would be better to not have that condition at all than to use *. In this case it's simple as all of your comparison operators are "=". That means you can use the hash form of conditions. Your code is also quite inefficient as you load the same report object 3 or four times. Your question about one of the params being null doesn't make sense for this reason: you just use the same param again and again. Also you set a variable called @report to be a Problem object which is confusing.

@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)


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
                                       ]
                       )
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜