如何将正确的JSON数据从Rails控制器返回给jQuery自动完成选择框?
问题描述:
我努力实现jQuery UI的“组合框”示例。 。如何将正确的JSON数据从Rails控制器返回给jQuery自动完成选择框?
render :text => Product.find_by_sql("select id, part_number from products where part_number like '#{params[:term]}%'").collect{|p| p.part_number}.to_json
我真正想做的事情,当然是:我已经建立了一个远程数据源,并将其返回值我键入然而,只有当我返回一个字符串数组,像这样的作品,就是让它也返回AR对象的id。不幸的是,当我尝试在子数组中返回它们时,我的组合框中出现一堆“未定义”值。
这里是一个触发我的组合框的“选择”事件:
select: function(event, ui) {
ui.item.option.selected = true;
self._trigger("selected", event, {
item: ui.item.option
});
},
我已通过jQuery UI的文档,我想不通这是什么代码实际上做。另外,我无法弄清楚我需要返回的JSON结构应该是什么。
答
您需要返回一个散列数组,每个散列数有两个属性 - id和label。
我已经成功使用此:
collect{|p| {:label=>p.name, :id=>p.id}}.to_json
(我想你想你的对象,而不是叫名字的PART_NUMBER,但是这就是格式)
另外,我想你代码是打开的SQL注入,你应该使用“喜欢?”句法。
Product.where("part_number like ?", "#{params[:term]}%")
还有这种宝石,我还没有使用,但应该工作:
答
什么你的工作我不能代表的轨道部分发言,但我知道的是,自动完成构件预期的格式如下:
本地数据可以是字符串的简单阵列,或者它包含在阵列中的每个项目 对象,与标签或值 财产或两者。
什么上面的意思是,如果你不回一个简单的字符串Array
,你必须有包括至少标签或值属性(数组中的对象可以包含对象的数组其他的东西,小部件不关心)。例如,下面的工作就好了(你可以访问事件处理id
属性(如ui.item.id
)
[{ label: 'Google', id: '1234' }, { label: 'Yahoo', id: '2345' }, ... ];
关于你的第二个问题:
我已通过jQuery UI文档,我无法弄清楚这个代码实际上做了什么。
的片的问题在代码应该修改组合框的基本select
元件并设置适当的option
为选中状态。如果您使用的是远程数据源,那么您可能完全没有这个功能。