Ruby on rails 在MyRails应用程序中实现搜索过滤器
我想在我的应用程序中为我的产品创建过滤器,但我不知道如何做到这一点。 在products/index页面上,我显示了我的产品集合,我创建了如下表单:Ruby on rails 在MyRails应用程序中实现搜索过滤器,ruby-on-rails,ajax,checkbox,Ruby On Rails,Ajax,Checkbox,我想在我的应用程序中为我的产品创建过滤器,但我不知道如何做到这一点。 在products/index页面上,我显示了我的产品集合,我创建了如下表单: = form_tag products_path, method: 'get', :remote => true, class: 'form-inline min-marged-top' do || .form-group = check_box_tag :price
= form_tag products_path, method: 'get', :remote => true, class: 'form-inline min-marged-top' do ||
.form-group
= check_box_tag :price
= check_box_tag :weight
= button_tag(type: 'submit', value: "Go", class: 'btn btn-success')
其思想是,当用户勾选“价格”或“重量”复选框时,产品将按价格/重量重新排序。这是一个Ajax表单,这就是为什么我使用:remote=>true
。
首先,我注意到使用复选框标记
,我的复选框的值在我是否勾选它们时不会改变:它们保持等于1。当复选框勾选或不勾选时,它不应该改变吗?
假设单击复选框时该值应等于1,这就是我想在方法索引中的product_控制器中执行的操作(知道我也可以通过搜索表单发送params[:content]
):
这是对我的应用程序中的产品实施按价格和重量筛选的好方法吗?Product.search的工作原理。您是否为产品编写了类方法,或者这是一些gem的扩展。你在用宝石搜索吗?@AmanGarg我在用宝石pg_search@AmanGarg你对如何实现这一目标有什么想法吗?
def index
if params[:content].present? && (params[:price] == "1")
@products = Product.search(params[:content]).order(price: :desc).paginate(:page => params[:page], :per_page => 2)
respond_to do |format|
format.js {}
format.html{ render :index }
end
elsif params[:content].present? && (params[:weight] == "1")
@products = Product.search(params[:content]).order(weight: :desc).paginate(:page => params[:page], :per_page => 2)
respond_to do |format|
format.js {}
format.html{ render :index }
elsif params[:price] == "1"
@products = Product.all.order(price: :desc).paginate(:page => params[:page], :per_page => 2)
respond_to do |format|
format.js {}
format.html{ render :index }
elsif params[:weight] == "1"
@products = Product.all.order(weight: :desc).paginate(:page => params[:page], :per_page => 2)
respond_to do |format|
format.js {}
format.html{ render :index }
else
@products = Product.all.paginate(:page => params[:page], :per_page => 2)
end
end