用于模型的轨道过滤器

时间:2013-12-04 16:27:54

标签: ruby-on-rails ruby filter filtering

如何在Rails中创建动态查询(我对这个框架和ruby都很新)。

在我的控制器中我有:

class ProductController < ApplicationController
  def index
    @products = Product.where(active:1).paginate(:page => params[:page])
    @categories= Category.all
  end
end

我的部分观点是:

   .filter-product
      =form_tag do
        %table#id-form 
          %tr
            %th{valign: "top"} Product name:
            %td
              %input.inp-form{type: "text"}/
            %td
          %tr
            %th{valign: "top"} Category:
            %td
              %select
                %option{value: ""} All
                - @categories.each do  |cat|
                  %option{value: cat.id}= cat.label
            %td
          %tr
            %th{valign: "top"} Stock:
            %td
              %input.inp-form{type: "checkbox"}/
            %td
          %tr
            %th  
            %td{valign: "top"}
              %input.form-submit{type: "button", value: ""}/
              %input.form-reset{type: "reset", value: ""}/
            %td

我想按标题,可用性(库存)和类别过滤我的产品。如果未设置查询,查询也应该有效。

我尝试了至少3-4种方式,但没有一种方法有效。

编辑: 这是我的模特:

    class Product < ActiveRecord::Base
     belongs_to :category
    end

    class Category < ActiveRecord::Base
     has_many :products
    end

2 个答案:

答案 0 :(得分:0)

请尝试以下方式:

Product.where(active:1,"title like ?", "category_id = ?", params[:title].presence || '%%', params[:category_id].presence || Category.all.collect(&:id) ).paginate(:page => params[:page]...

我希望它适合你。

答案 1 :(得分:0)

我肯定会尝试使用像Ransack这样的宝石“标准化”你的过滤器。这样您就不必自己编写所有代码,并且Ransack与您现有的分页完美地集成在一起。 DRY也意味着“如果你不需要重新发明轮子”......