Rails如何实现多值搜索

时间:2013-11-06 05:30:04

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我正在尝试实施一个“复选框搜索”,允许用户根据他们选择的参数过滤掉记录(例如“全职”,“兼职”,“承包商”job_type)。我当前的代码只允许用户搜索一个job_type,而不是一个和/或另一个。

我目前的设置如下:

索引控制器操作:

def index
  @jobs = Job.search(params[:search])
end

索引视图:

<%= form_tag jobs_path, :method => 'get' do %>
  <p>
    <%= check_box_tag :search, value = "Contractor", params[:search] %>
    <%= check_box_tag :search, value = "Part time", params[:search] %>
   <%= check_box_tag :search, value = "Full time", params[:search] %>
    <%= submit_tag "Search", :job_type => nil %>
  </p>
<% end %>

工作模式:

  def self.search(search)
    if search
      find(:all, :conditions => ['job_type LIKE ?', "%#{search}%"])
    else
      find(:all)
    end
  end

如何修改此代码以允许某人搜索“兼职”和/或“全职”等职位记录?

1 个答案:

答案 0 :(得分:1)

首先,您需要将视图代码更改为以下内容,以便可以从表单中发送多个搜索参数值

查看代码

<%= form_tag jobs_path, :method => 'get' do %>
  <%= check_box_tag "search[]", "Contractor" %>
  <%= label_tag "Contractor" %>
  <%= check_box_tag "search[]", "Part Time" %>
  <%= label_tag "Part Time" %>
  <%= check_box_tag "search[]", "Full Time", %>
  <%= label_tag "Full Time" %>
<% end %>

然后在模型中,您需要将搜索查询更改为基于多个参数进行搜索,例如

def self.search(search)
  if search.blank?
    all
  else
    where("job_type IN (?)", search)
  end
end

搜索参数将是一个包含视图中选定值的数组

模型查询是rails 3 compatible