我同时使用pg_search和rails-jquery-autocomplete
。我有一个搜索范围,由 pg_search
提供支持,其使用方式如下:Node.node_search(query)
.
我尝试将该方法node_search
与Node
控制器上的autocomplete
调用一起使用,如下所示:
autocomplete :node, :node_search
但是我收到一个错误,即Node
上没有名为node_search
的列。
我也尝试做autocomplete :node, :name, scope: :node_search
,但这只查询列node.name
.它实际上并没有像我想要的那样将搜索查询传递给我的Node.node_search
。
基本上,我想发生的是,每当有人键入 1 或 2 个字符时,我希望它将该查询发送到Node.node_search
,而不是检查name
列或Node
模型上的任何其他列(现在成功接受查询)。
我如何实现这一点?
编辑 1
理想情况下,我希望能够做到这一点,而不必在 JS 中执行此操作。如果不存在,我想我可以使用JS。但我更愿意只在实际的rails-jquery-autocomplete gem中使用一些东西。
您应该向node_search路由发出自动完成发送请求:
$("your autocomplete").autocomplete({
source: function (request, response) {
$.ajax({
url: "your endpoint url",
data: { query: request },
success: function (data) {
$this.val(data);
},
error: function () {
alert('oops')
}
});
});
});'
你可以试试:
autocomplete :node, :node_search, scopes: [:named_scope_1, :named_scope_2, ...]
因为它接收范围数组并将它们链接起来。
必须在模型中定义范围:
scope :prospects, -> () { where prospect: true }