【发布时间】:2016-05-12 19:47:37
【问题描述】:
我的应用实现了实时搜索,并且运行正常。我遇到的问题是现在我有一个包含很多列的表,我想搜索所有元素。我只想有一个文本输入和一个下拉菜单,用于选择我要搜索的列。
可搜索模块
module Searchable
extend ActiveSupport::Concern
module ClassMethods
def search_for(present_column,record)
record.present? ? where(present_column+' LIKE ?', record+"%") : all
end
end
end
人员控制器
class PeopleController < ApplicationController
def index
@people = Person.page(params[:page]).per(5).search_for(params[:object_columns], params[:search])
end
搜索引擎
<%= form_tag do %>
<% valid_column_names = target.column_names.reject{|r| r == "created_at" || r == "updated_at" || r == "slug"} %>
<%= select_tag :object_columns, options_for_select(valid_column_names) %>
<%= text_field_tag :search, '', autocomplete: :off %>
<% end %>
实时搜索 js
$(function () {
$("input#search").keyup(function () {
$.get($("#object_columns option:selected").text(), $("#object_columns").serialize(), null, "script");
$.get($("#search").attr("action"), $("#search").serialize(), null, "script");
});
});
输入文本按预期返回,但 object_columns 中没有任何内容。例如,当我键入单词“n”时,我的服务器终端会返回此消息:
Started GET "/people?&search=n&_=1463081307356" for 127.0.0.1 at 2016-05-12 16:28:34 -0300
Processing by PeopleController#index as JS
Parameters: {"search"=>"n", "_"=>"1463081307356"}
编辑:
后来我有了一个想法并做了一些改变。我给表单一个 ID 并用它来做请求,现在我可以同时拥有两个信息(列名和搜索记录)。现在唯一的问题是路径,它返回一个 URI 错误。
搜索引擎
<%= form_tag people_path, class: "form_id" do %>
<% valid_column_names = target.column_names.reject{|r| r == "created_at" || r == "updated_at" || r == "slug"} %>
<%= select_tag :object_columns, options_for_select(valid_column_names) %>
<%= text_field_tag :search, '', autocomplete: :off %>
<% end %>
实时搜索
$(function () {
$("input#search").keyup(function () {
$.get($(".form_id"), $(".form_id").serialize(), null, "script");null, "script");
});
});
【问题讨论】:
-
不太明白
def search_for(present_column,record)方法,all的返回值是什么? -
您正在向您的服务器发送两个
$.get(GET) 请求。你能评论你发送 $('#search') 的那一行吗?您是否看到对服务器的 GET 请求? -
对不起,“all”是一个测试,它已从真实代码中删除,我忘了从这里删除,没有它,也不起作用
-
@Leito 当我删除 $('#search') 请求时,列名返回如下:
Started GET "/name?object_columns=name&_=1463142917053" for 127.0.0.1 at 2016-05-13 09:35:22 -0300 -
所以,现在我可以获取列名和搜索字段,但不能同时获取,一次只能获取一个,如何在按键时同时获取它们?
标签: javascript jquery ruby-on-rails ruby ruby-on-rails-4