按一个搜索框和两个下拉框过滤索引页

时间:2019-07-18 11:40:56

标签: ruby ruby-on-rails-3 ruby-on-rails-4 filter simple-form

鉴于搜索框的内容以及在其他2个下拉列表中选择的内容,我正在尝试过滤索引页的结果。

我正在使用simple_form,并且已经有了搜索框,并且可以使用以下参数之一过滤结果:

我的观点:

<%= form_tag(entitys_path, method: :get) do %>
    <%= text_field_tag :name_filter, params[:name_filter] %>
    <%= submit_tag 'Search' , name: nil %>
<% end %>

我的索引方法:

def index
    @entitys = if params[:name_filter]
        Entity.joins(:user).where('LOWER(users.name) LIKE?', "%# 
        {params[:name_filter]}%".downcase).paginate(page: 
        params[:page], per_page: 8)
    else            
        @entitys = Entity.all.paginate(page: params[:page], 
        per_page: 8)
    end
end 

我不知道如何再创建2个下拉菜单并将其应用于索引方法过滤。 预先感谢。

2 个答案:

答案 0 :(得分:0)

从评论看来,问题似乎在于如何填充选择标签。这是所需的方法

所以它们可能看起来像这样:

<%= select_tag(
  'location',
  options_from_collection_for_select(
    get_all_locations,
    'name', # The method called to generate the value passed up to the controller
    'name'  # The value displayed to users
  )
) %>

这将在提交表单时填充params[:location]

答案 1 :(得分:0)

查看:

<%= form_tag(entitys_path, method: :get) do %>
          <%= text_field_tag :name_filter, params[:name_filter] %>
          <%= select_tag :location_filter, options_for_select(get_city_list) %>
           <%= select_tag :activity_filter, options_for_select(get_professional_activity_list) %>
          <%= submit_tag 'Procurar' , name: nil %>
        <% end %>

控制器索引方法:

def index
        if params[:name_filter].present? || params[:activity_filter].present? || params[:location_filter].present?
            @entitys = Entity.joins(:user).where('LOWER(users.name) LIKE?', "%#{params[:name_filter]}%".downcase).where('LOWER(entities.location) LIKE?', "%#{params[:location_filter]}%".downcase).where('LOWER(entities.professional_activity) LIKE?', "%#{params[:activity_filter]}%".downcase).paginate(page: params[:page], per_page: 8)
        else    
            @entitys = Entity.all.paginate(page: params[:page], per_page: 8)
        end
    end
enter code here

这可以满足我的需求(或者看起来如此)