【发布时间】:2011-08-24 22:00:22
【问题描述】:
我正在使用CodeNothing's jQuery Autocomplete 插件来启用文本输入的自动完成功能。
插件需要获取一个json对象,格式如下:
[{ value: 'something' }, { value: 'something else' }, { value: 'another thing' }]
所以,我的 Tag 模型将其名称存储为 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
这是我能想到的最好的了。它有效,但看起来很笨拙。
是否有更快或更好的方法将带有name 方法的标签数组转换为带有{ :value => tag.name } 形式的哈希数组?
另外,对于奖励积分,您能否建议对此控制器操作进行任何改进?
谢谢!
注意
我最终受到了 Deradon 的回答的启发,并提出了这个最终实现:
在我的 Tag 模型中我添加了:
def to_value
{ :value => name }
end
然后在我的控制器中我简单地调用了:
def index
@tags = Tag.where("name LIKE ?", params[:value]+"%" )
respond_to do |format|
format.js { render :json => @tags.map(&:to_value) }
end
end
很好,简短,简单。我对此感到高兴得多。谢谢!
【问题讨论】:
标签: ruby-on-rails ruby ajax ruby-on-rails-3 json