搜索栏+选择标记栏

时间:2017-11-16 13:46:45

标签: ruby-on-rails ruby ruby-on-rails-5

我有一个搜索栏+一个下拉列表来搜索餐馆或用餐,并且能够按类别过滤(法国食品,印度,脚等)

index.html.erb

<%= form_tag meals_path, method: 'get', id: 'products_search' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= select_tag :search_category, options_for_select(@categories, @categories[0]) %>
    <%= submit_tag "Rechercher", name: nil %>
  </p>
<% end %>

meals_controller.rb

@meals_search = @meals.search(params[:search], params[:search_category])

模型/ meal.rb

def self.search(search, search_category)
  if search
    if search && search_category == "All"
    where('name LIKE ?', "%#{search}%")
    elsif search == "" && search_category != "All"
      where('category = ?',  "%#{search_category}%")
    else
      where('name LIKE ? AND category = ?', "%#{search}%", "%#{search_category}%")
    end
  else
    all
  end
end

搜索栏完美无缺,但类别过滤器(search_category)却没有。我实际上得到一个空列表,虽然你只能过滤至少有一个餐馆或餐厅的类别(所以列表不能为空)。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

只需使用ransack,进行高级搜索和排序

答案 1 :(得分:2)

好的,按照@vishnuprakash的建议,我用ransack gem来解决我的问题:

我已将gem 'ransack'添加到Gemfile并运行bundle

然后我在index.html.erb中创建了这个表单:

<%= search_form_for @q do |f| %>

  <%= f.search_field :name_cont %>

  <%= f.select :category_eq, options_for_select(@categories), include_blank: true %>

  <%= f.submit %>
<% end %>

和meals_controller.rb:

 @q = @meals.ransack(params[:q])
      @meals_search = @q.result(distinct: true)

我还摆脱了先前在model / meals.rb中创建的功能。

它现在完美无缺!如果您遇到类似问题,请随时查看the ransack dock。你也可以给我发消息,我很乐意提供帮助。

答案 2 :(得分:0)

尝试更改

where('name LIKE ? AND category = ?', "%#{search}%", "%#{search_category}%")

where('name LIKE ? AND category = ?', "%#{search}%", search_category)

where('category = ?',  "%#{search_category}%")

where('category = ?',  search_category)

%...%语法仅适用于LIKE,而不适用于=