RoR 中有一个搜索操作可以处理一些参数,例如:
params[:name] # can be nil or first_name
params[:age] # can be nil or age
params[:city] # can be nil or country
params[:tag] # can be nil or country
型号名称是Person
。它也has_many :tags
。
在寻找我需要的人时,我喜欢和所有存在的条件。当然,它不合理也不干燥。
我试图做的事情:
conditions = []
conditions << [ "name like ?", params[:name]+"%" ] if params[:name].present?
conditions << [ "age = ?", params[:age] ] if params[:age].present?
conditions << [ "city = like ?", params[:city]+"%" ] if params[:city].present?
@persons = Person.all(:conditions => conditions )
#What about tags? How do include them if params[:tag].present?
当然,我希望我的代码是 DRY。现在不是了。params[:age]
更重要的是,如果并且不存在params[:name]
,它将导致异常。params[:city]
我该如何解决?以及如何包含由tag.name=params[:tag]
(if params[:tag].present?
) 过滤的人员的标签?