如何对模型和控制器进行异步调用并在视图中获取其值?

时间:2012-12-13 11:34:22

标签: javascript ruby-on-rails ruby ajax backbone.js

我正在尝试使用Ruby On Rails和Backbone.js进行即时搜索。

我已将所有单词存储在名为Dictionary的模型中。它包含所有单词的列表。 现在,我想创建一个搜索栏,如果我输入“c”,我想列出以“c”开头的所有单词,如果我输入“ca”,它应该列出所有以“ca”开头的单词。

是否有我可以学习的开源应用程序?

3 个答案:

答案 0 :(得分:1)

我还没有测试过这段代码。可能存在拼写错误,但我认为它会起作用。请评论,以便我可以编辑,如果它不起作用

视图

<%= text_field_tag 'search', :nil, :class => "search_box" %>
 <ul class="results">
    <span class="spinning" style="display:none;"></span>
 </ul>

jquery

$(".search_box").keyup(function(){
    $.get ("/search/" + this.value)
    $(".spinning").show()
)}

routes.rb

get "/search/:search" => "dictionaries#search", :as => :search

dictionaries_controller.rb

def search
 @dictionarys = Dictionary.where("word LIKE ?", params[:search])
end

视图/ dictionarys / search.js.erb

$(".results").empty().append("<%= j( render @dictionaries) %>"
$(".spinning").hide()

views / dictionarys / _dictionary.html.erb partial

<li><%=dictionary.word%></li>

答案 1 :(得分:0)

使用jQuery auto_complete,并连接AJAX调用以从数据库中获取值。请参阅jQuery Autocomplete documentation

答案 2 :(得分:0)

你可以这样做。

GUI中的Onclick(),对ruby服务器进行ajax调用,输入的数据为密钥。

在ruby端使用类变量只加载一次字典数据,这样你就不必每次都进行db fetch。

现在在ruby端进行正则表达式匹配,并将数据发送到GUI,此ajax调用的onsuccess()相应地加载GUI小部件。

希望我足够清楚。