Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在MyRails应用程序中实现搜索过滤器_Ruby On Rails_Ajax_Checkbox - Fatal编程技术网

Ruby on rails 在MyRails应用程序中实现搜索过滤器

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

我想在我的应用程序中为我的产品创建过滤器,但我不知道如何做到这一点。 在products/index页面上,我显示了我的产品集合,我创建了如下表单:

  = 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