Ruby,动态查询活动模型

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”方式可以解决该问题。

最佳做法是什么,

谢谢。

MrY*_*iji 5

您可以使用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)