Hil*_*mcı 1 ruby activerecord ruby-on-rails rails-activerecord
我在ruby on rails应用程序中有一个Order模型,该模型具有几个属性。我想根据用户给定的参数(例如itemCount,totalPrice和创建日期)查询这些订单。
如果给定了其中一个属性,那不是零,我需要使用它来查询模型。
我可以做类似的事情:
if params[:totalPrice] and params[:itemCount] and params[:created_date]
@product = Product.where(totalPrice: params[:totalPrice],itemCount: params[:itemCount],created_date: params[:created_date])
elsif params[:totalPrice] and params[:itemCount]
@product = Product.where(totalPrice: params[:totalPrice],itemCount: params[:itemCount])
elsif params[:totalPrice] and params[:created_date]
@product = Product.where(totalPrice: params[:totalPrice],created_date: params[:created_date])
elsif params[:itemCount] and params[:created_date]
@product = Product.where(itemCount: params[:itemCount],created_date: params[:created_date])
elseif ....(and continues)
Run Code Online (Sandbox Code Playgroud)
但是,我不确定。也许有一种“ Ruby”方式可以解决该问题。
最佳做法是什么,
谢谢。
您可以使用ActiveRecord链接不同的作用域:
@products = Product.all
@products = @products.where(totalPrice: params[:totalPrice]) if params[:totalPrice]
@products = @products.where(itemCount: params[:itemCount]) if params[:itemCount]
@products = @products.where(created_date: params[:created_date]) if params[:created_date]
# etc...
Run Code Online (Sandbox Code Playgroud)
这很容易是动态的(但列入白名单):
filterable_columns = %i(itemCount totalPrice created_date)
@products = Product.all
filterable_columns.each do |column|
@products = @products.where(column => params[column]) if params[column]
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |