如果id不为null,如何连接where子句

时间:2016-07-19 09:38:21

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有一个返回ActiveRecord_Relation的方法,如果在where中收到的id不为null,我想连接一个params子句。像这样的东西

query.where(item_id: params[:item_id]) # only if params[:item_id] is not null.

query # only if params[:item_id] is null.

这将是第一个完美的查询:

query.where(item_id: params[:item_id])

其中,nil值使整个地方无效,而不是使用nil id搜索item_id。

当然我可以使用条件来做到这一点。但我想知道是否有一种方法可以做到这一点。单行或某事

谢谢!

2 个答案:

答案 0 :(得分:0)

在模型中使用范围 - 这是他们的目标,用于对模型的查询进行范围调整。范围总是返回一个查询,因此您可以执行以下操作(假设您要查询的模型称为Product):

class Product < ActiveRecord::Base
   scope :by_item_id, -> (item_id) { where(item_id: item_id) if item_id }
end

然后你可以致电Product.by_item_id(params[:item_id])

答案 1 :(得分:0)

如果要重复查询,写入范围是最好的事情之一。 如果没有,你可以简单地做:

query.where(item_id: params[:item_id]) if params[:item_id]