Rails - 高级搜索

时间:2011-06-17 21:08:31

标签: ruby-on-rails ajax

我能够使用AJAX在我的一个模型中完成标准搜索:

查看:

<%= form_tag facilities_path, :method => 'get', :id => "facilities_search", :remote => true do %>
    <%= text_field_tag :search, params[:search], :placeholder => 'Find facility', :class => "search" %>
    <%= submit_tag "Search", :name => nil %>
<% end %> 

MODEL:

 def self.search(search)
   if search
     where(['lower(name) LIKE ?', "%#{search.downcase}%"])
   else
     scoped
   end
 end

index.js.erb的:

$("#facilities").html("<%= escape_javascript(render("facilities")) %>");

的application.js:

  $("#facilities_search input").keyup(function() {
    $.get($("#facilities_search").attr("action"), $("#facilities_search").serialize(), null, "script");
    return false;
  });

现在我想构建一个“高级搜索”,特别是我想在搜索(A,B,C)字段上方放置3个单选按钮,以允许用户选择要搜索的模型。换句话说,如果他选择B,搜索将在Bs内。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我认为你有几个选择可供选择,以确定如何实现这一点。

选项1:您可以使用单选按钮上的JavaScript onclick函数来更改表单的提交目标(表单操作)。因此,根据选择的单选按钮(目标模型),您可以根据搜索的运行位置将表单提交给不同的控制器。

选项2:另一个选项,可能更干净,更少受用户问题影响(即,如果用户禁用了JavaScript),则将所有搜索路由到一个控制器方法,然后根据值调用不同的模型参数:

def search
    @results = []

    # if the user selects the "user" radio button
    if params[:searchtarget] == "user"
        @results = User.search(params[:term])
    # order radio button selected
    elsif  params[:searchtarget] == "order"
        @results = Order.search(params[:term])
    # default
    else
        @results = Notes.search(params[:term])
    end
end