我是Rails的新手。我开始研究POC。
我的控制器代码如下:
@xyz = if params[:id].present?
if params[:mobile_number].present?
Seeker.where("id = ? and mobile_number = ?" , params[:id], params[:mobile_number])
else
Seeker.where("id = ?", params[:id])
end
elsif params[:seekerid].present?
Seeker.where("mobile_number = ?" , params[:mobile_number])
else
Seeker.where(nil);
end
但是我认为这不是一个好方法。考虑一下我是否有很多参数,然后设置present?
条件,然后形成查询将变得很复杂。或者我可以分别构成一个查询,然后将其作为实例变量放在条件中。
什么是最好的方法?
答案 0 :(得分:4)
当每个参数都存在时,您可以递增地添加where
条语句:
@xyz = Seeker.scoped
@xyz = @xyz.where(id: params[:id]) if params[:id].present?
@xyz = @zyx.where(mobile_number: params[:mobile_number]) if params[:mobile_number].present?
一种更简洁的方法可能是将该逻辑移到Seeker模型中的某个范围或类方法中。
答案 1 :(得分:0)
您好I am new to Rails
如果您正在搜索小型项目,小型数据库,则可以使用Ruby的scope,并查看arieljuod的答案。但是,如果您想使搜索功能更快,更深入,则可以找到一些宝石:
Ruby on Rails还有许多其他令人惊奇的方式。
编码愉快!
答案 2 :(得分:0)
如果您想根据每个参数来查找记录,并且具有使用该方法的最佳方法的价值,则
params = {id: nil, mobile_number: "98XXXXXX12" }
Seeker.where(params.compact)
紧凑将从参数中删除 nil 值,并直接使用Existing参数进行查找。
注意::它将仅删除 nil 个值,而不会删除“” 空白字符串