关于ruby on rails:仅当搜索字符串不为空时,ActiveRecord(SQL)才查询多列

ActiveRecord (SQL) query multiple columns only if search string not empty

使用填充有已注册选民的PG数据库。

尝试设置它,以便我可以按名字,姓氏,邮政编码或城市搜索。我希望能够找到与所有输入的参数都匹配的所有选民,但在处理空白搜索字段时遇到麻烦。

1
2
WHERE("zip LIKE ? OR city LIKE ? OR last_name LIKE ? OR first_name LIKE ?",
"#{params[:zip]}","#{params[:city]}","#{params[:last_name]}","#{params[:first_name]}")

是否有更好的方法构建它,使其与所有输入的参数匹配,但忽略空字符串参数?现在,如果我输入名字和姓氏"约翰·史密斯",我将得到"约翰·琼斯"和"简·史密斯"。


这可以解决问题:

1
2
3
4
attrs_name_to_search = %w( zip city last_name first_name )
fitlered_params = params.slice(*attrs_name_to_search).select { |_,v| v.present? }
sql_cond = filtered_params.map { |k,_|"#{k} LIKE :#{k}" }.join(' OR ')
YourModel.where(sql_cond, filtered_params)

但是如果没有提供zip / city / last_name / first_name,它应该返回所有记录。