带有动态查询的Rails搜索表单

时间:2016-11-02 20:00:06

标签: jquery html ruby-on-rails ruby-on-rails-3

我基本上有this问题,除了我还希望用户能够动态添加和删除搜索字段。基本上,用户从下拉菜单中选择属性字段和谓词,然后将文本输入搜索框。所以它看起来像这样:

student.last_name contains "stein"   

从下拉菜单中选择“student.last_name”和“contains”。

但我正在为此添加一个动态部分,这会带来一个选项,可以使用第二个(相同的)查询加入上一个查询。用户被授予使用“或”或“和”加入查询的选项。

基本上,用户可以进行如下搜索:

student.last_name contains "ma" AND 
student.first_name does not equal "john" OR 
student.graduated equals "true"

这是绊倒我的动态部分。

这是我的search.html.erb:

<%= form_tag(search_students_path, :method => "post", id: "search-form") do %>
  <div class="fields">
    <%= render :partial => 'students/condition_fields' %>
  </div>
  <%= submit_tag "Search", class: "search_button" %>
<% end %>

我的_condition_fields.html.erb:

<%= select_tag "search_from", "<option> first_name </option>
                               <option> last_name </option>
                               <option> age </option>
                               <option> graduated </option>".html_safe %>

<%= select_tag "predicate",   "<option> equals </option>
                               <option> does not equal </option>
                               <option> contains </option>
                               <option> does not contain </option>".html_safe %>

<%= text_field_tag :search, params[:search], placeholder: "enter value...", class: "big_searchbox" %>

我的控制器代码:

  def search
    @students = Student.search(params[:search], params[:search_from], params[:conjunction])

最后,我的模特:

  def self.search(search, search_from, conjunction)
    if search
      query = [search_from + conjunction + "?", search]
      includes(:tags, :workstations).where(query)
    end
  end

我的condition_fields是我想要动态添加和删除的部分(以及每个额外搜索条件之前的连接下拉菜单)。

我知道一些宝石可能对此有所帮助,但到目前为止,它们都没有轻易提供用“或”和“和”连词动态添加字段的能力,我想自己学习这个实践。

0 个答案:

没有答案