使用Ruby on Rails 3中的Model作为jQuery自动完成的源代码



我使用简单的jQuery进行自动完成,当我在本地定义jQuery中的选项列表时,它工作得很好。下面是代码(几乎直接来自jQuery站点):

<script>
jQuery(function() {
    var easy = [
        "one",
        "two",
        "three",
    ];
    jQuery( "#tags" ).autocomplete({
        source: easy
    });
});
</script>

<div class="demo">
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags">
</div>

我想要做的是在我称为user的模型上传递这些整体,该模型具有:name和:business_name属性,并使用该模型中的条目作为选项。我是否可以将此数据传递给jQuery变量,或者是否可以通过另一种方式实现?

首先需要两个部分:

  • 客户端(jQuery UI Autocomplete)
  • 后台(提供数据)

你不能直接从javascript代码中查询模型,查询必须通过控制器完成。

首先,看一下jQuery自动完成文档和示例。

你看到的是结果请求将有一个名为"term"的参数,这就是你在输入字段中开始输入的内容。

请求看起来像

http://yourdomain.com/yourcontroller?term=whatyoutype

jQuery想要的是一个包含JSON格式哈希值的数组,如:

[{"label": "Formatted Name to Show in List for first match", "value": 1}, {"label": "Formatted Name for Match #2", "value": 2}]

label:将显示在自动完成列表中value:当你选择一个条目(如组合框)时要使用的值

我建议创建一个名为UsersController的控制器,这样请求看起来就像 http://yourdomain.com/users?term=whatyoutype

class UsersController < ApplicationController

  def index
    # general model
    @users  = User
    # check if we should filter results
    if params.has_key?(:term) && !params[:term].empty?
      q = "#{params[:term]}%"
      @users  = @users.where("name LIKE ? OR business_name LIKE ?", q, q)
    end
    # only 20 entries
    @users  = @users.limit(20) 

    # respond in the right format
    respond_to do |format|
      # normal html layout
      format.html
      # json for jquery
      format.json do 
        # make an array
        @users.map! do |u| 
          {
            :label => u.name + " / " + u.business_name,
            :value => u.id
          }
        end
        render :json => @users 
      end
    end
  end
end

现在你可以激活自动完成:

jQuery( "#tags" ).autocomplete({
    source: '<%= users_path(:format => :json) %>'
});

users_path(:format => :json)将生成类似于/users.json?term=yoursearchterm

的路径

我希望这对你有用

相关内容

  • 没有找到相关文章

最新更新