具有多个参数的Model.where()并检查它们是否存在于Rails中

时间:2019-05-09 18:10:26

标签: ruby-on-rails ruby-on-rails-3

我是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?条件,然后形成查询将变得很复杂。或者我可以分别构成一个查询,然后将其作为实例变量放在条件中。

什么是最好的方法?

3 个答案:

答案 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 个值,而不会删除“” 空白字符串