我能够使用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内。
我该怎么做?
答案 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