2
我使用CodeNothing's jQuery Autocomplete插件在文本输入上启用自动完成。Ruby/Rails:响应json请求,从对象数组中创建散列数组,更改一个键的名称
的插件需要中检索JSON对象的形式:
[{ value: 'something' }, { value: 'something else' }, { value: 'another thing' }]
所以,我的标签模型存储其名称name
,不value
。为了应对这种响应Ajax请求我创建了以下tags#index
行动:
def index
@tags = Tag.where("name LIKE ?", "%#{params[:value]}%")
@results = Array.new
@tags.each do |t|
@results << { :value => t.name }
end
respond_to do |format|
format.json { render :json => @results }
end
end
这是我能想到的最好的。它的工作,但似乎cirldgey。
有没有更快或更好的方法来将name
方法的标签数组转换为{ :value => tag.name }
形式的哈希数组?
此外,对于奖励积分,您能否建议对此控制器操作进行任何改进?
谢谢!
注意
我结束了由Deradon的回答得到灵感,并与这个最后的实施提出了:
在我的标签模式,我说:
3210在随后我的控制器我简单地称为:
def index
@tags = Tag.where("name LIKE ?", params[:value]+"%")
respond_to do |format|
format.js { render :json => @tags.map(&:to_value) }
end
end
不错,简短,简单。我对此感到高兴。谢谢!
我并没有完全使用,但你给了我一个伟大的想法。请参阅原始问题的注释。谢谢您的帮助! – Andrew