相关疑难解决方法(0)

Rails范围对NOT IN值没有任何作用

我有一个Rails 3范围,它排除了一系列ID.

编写范围的最佳方法是什么,以便在数组为空且仍可链接时它不执行任何操作?我目前有这个,它的工作原理,但似乎有点兴奋:

scope :excluding_ids, 
         lambda {|ids| ids.empty? ? relation : where('id not in (?)', ids) }
Run Code Online (Sandbox Code Playgroud)

如果我没有"ids.empty ??关系:"位,当id为空时,生成的SQL就是

... ID not in (NULL) ...
Run Code Online (Sandbox Code Playgroud)

这将永远不会返回.所以类似于:

Model.excluding_ids([]).where('id > 0')
Run Code Online (Sandbox Code Playgroud)

没有结果.

activerecord scope ruby-on-rails-3

12
推荐指数
2
解决办法
8147
查看次数

rails"where"声明:如何忽略空白参数

我是Rails的新手,我有一种感觉,我正在从错误的角度接近这个但是这里......我有一个显示车辆的列表页面,我正在尝试添加过滤功能,用户可以过滤结果通过vehicle_size,制造商和/或payment_options.

使用三个选择表单字段,用户可以设置以下值:vehicle_size,:manufacturer和/或:payment_options参数,并将这些值提交给我正在使用的控制器

@vehicles = Vehicle.order("vehicles.id ASC").where(:visible => true, :vehicle_size => params[:vehicle_size] )
Run Code Online (Sandbox Code Playgroud)

一种查询.这适用于单个参数(上面返回的结果是正确的车辆尺寸)但我希望能够传递所有3个参数而不会得到任何结果,如果其中一个参数留空.

有没有办法在不经过编写过程的情况下执行此操作if语句定义不同的where语句,具体取决于params的设置?如果我添加更多过滤器选项,这可能会变得非常繁琐.如果has_key解决方案的效果可能是某种内联:

@vehicles = Vehicle.order("vehicles.id ASC").where(:visible => true, if(params.has_key?(:vehicle_size):vehicle_size => params[:vehicle_size], end if(params.has_key?(:manufacturer):manufacturer => params[:manufacturer] end )
Run Code Online (Sandbox Code Playgroud)

对N00b问题表示歉意,并提前致谢.

ignore ruby-on-rails where params

1
推荐指数
1
解决办法
1371
查看次数