我有一个返回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。
当然我可以使用条件来做到这一点。但我想知道是否有一种方法可以做到这一点。单行或某事
谢谢!
答案 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]