【发布时间】:2016-07-01 02:28:49
【问题描述】:
我正在尝试扩展我的服务器端数据表的功能。我将一些额外的过滤器传递给我的控制器/数据表,用于过滤结果。目前在我的模型中,我在应用我的范围之前测试参数是否存在,但我不相信这是最好的方法,因为当我的过滤器列表增长时,我会有很多 if/else 场景。我怎样才能以'rails方式'做到这一点?
if params[:store_id].present? && params[:status].present?
Order.store(params[:store_id]).status(params[:status])
elsif params[:store_id].present? && !params[:status].present?
Order.store(params[:store_id])
elsif !params[:store_id].present? && params[:status].present?
Order.status(params[:status])
else
Order.joins(:store).all
end
回答: 将答案合并到这个工作代码中:
query = Order.all
query = query.store(params[:store_id]) if params[:store_id].present?
query = query.status(params[:status]) if params[:status].present?
query.includes(:store)
【问题讨论】:
-
为什么你需要使用一个 api 端点来处理 3 个不同的任务。为什么不使用 3 个端点呢?
-
你这是什么意思?我正在按商店/状态过滤我的订单。
-
啊,好吧,我的错……我以为你在做一些手术
标签: ruby-on-rails ruby rails-activerecord