在Sinatra中实现JS模糊搜索(ruby)

时间:2015-03-15 11:20:27

标签: javascript ruby sinatra haml fuzzy-search

我正在尝试在fuse.js项目中使用Sinatra进行模糊搜索,但我在JavaScript实现方面有点迷失。

我创建了route,其中包含JSON格式的所有数据:

# encoding: utf-8
class Lambree < Sinatra::Base
  get "/json/all" do
    content_type :json
    @pre = Prescriptions.all
    @pre.to_json
  end
end

然后我加载了fuse.js并在我的layout.haml中添加了一个函数:

:javascript
  $(function() {
    $( "#fuse" ).search( {
      onSelect: function(text) {
          var data = $.getJSON("/json/all")
          var f = new Fuse(data);
          var result = f.search('Falen');
        }
      }
    );
  });


%label{:for => "search"} Ψάξε:
%input#search/
%button#but{:onclick => "search()"} Search

这当然不起作用。

我需要了解如何调用JS函数,因为我错过了很多但却无法准确说明从哪里开始!任何带有一些代码和一步一步解释的例子都会受到欢迎!

由于

1 个答案:

答案 0 :(得分:1)

现在回答真正的问题。您需要将搜索文本传递给ruby代码。

$("#fuse").search({
  onSelect: function(text) {
    var data = $.getJSON("/json/all", {text: text})
    var f = new Fuse(data);
    var result = f.search('Falen');
  }
});

之后在你的方法中获取它(我不记得如何使用sinatra,对不起,下面的代码可能会或可能不会按原样运行)。

get "/json/all" do
  content_type :json
  text = params[:text]
  pre = Prescriptions.find(name: text)
  pre.to_json
end

你很高兴。