Rails3中的JqueryUI自动完成

时间:2011-08-18 14:26:11

标签: ruby-on-rails ruby-on-rails-3 json jquery-ui

$(document).ready ->
  $('#auto').autocomplete( source: "main/search" )

除了设置自动完成环境之外的代码,“#auto”是输入字段。

在我的主控制器中,我得到了搜索操作

def search
  @user = User.find_by_name 'castiel'
  respond_to do |format|
    format.json { render :json => @user.to_json(:only => :name) }
  end
end
一切似乎都运行得很好。当我输入一个字符时,我们说一个“c”,所以发送了ajax请求并收到了json数据。

在firebug中,它显示了ajax请求成功获取下面的json数据

{"name":"castiel"}

到目前为止一切顺利,但json数据的类型并不是自动完成所要求的类型。它要求json数据如下所示。

{"id":"castiel", "label":"castiel", "value":"castiel"}

所以这里有问题,如何将josn数据修改为我想要的那种。

2 个答案:

答案 0 :(得分:0)

在成功功能中,您需要返回类似

的内容
.autocomplete({
    source: function(request, response){
        $.ajax({
            url: "main/search",
            dataType: "json",
            data: {
                style: "full",
                maxRows: 12,
                term: request.term
            },success: function( data ) {
                    response( $.map( data, function( user ) {
                        return {
                            label: user.name,
                            value: user.id
                        }
                    }));

答案 1 :(得分:0)

Rails允许您在控制器的任何结构中提供JSON。使用jQuery自动完成帮助程序时,使用自动完成库方法json_for_autocomplete以所需格式提供JSON,如下所示:

# app/controllers/example_controller.rb

def autocomplete_example
  items = Example.where(...)
  respond_to do |format|
    format.json do
      render :json => json_for_autocomplete(items, 'name', [])
    end
  end
end

json_for_autocomplete的第一个参数是要返回的对象集合。第二个是调用这些对象来定义JSON哈希值的方法。最后一个参数适用于任何额外选项,可在以下位置找到:

https://github.com/crowdint/rails3-jquery-autocomplete/blob/master/lib/rails3-jquery-autocomplete/autocomplete.rb