Ruby on rails Ruby/Rails:响应json请求,从对象数组创建哈希数组,更改键的名称
我正在使用插件在文本输入上启用自动完成 插件需要以以下形式检索json对象:Ruby on rails Ruby/Rails:响应json请求,从对象数组创建哈希数组,更改键的名称,ruby-on-rails,ruby,ajax,ruby-on-rails-3,json,Ruby On Rails,Ruby,Ajax,Ruby On Rails 3,Json,我正在使用插件在文本输入上启用自动完成 插件需要以以下形式检索json对象: [{ value: 'something' }, { value: 'something else' }, { value: 'another thing' }] 因此,我的标记模型将其名称存储为name,而不是value。为了响应这个ajax请求,我创建了以下标记#index操作: def index @tags = Tag.where("name LIKE ?", "%#{params[:value]}%
[{ value: 'something' }, { value: 'something else' }, { value: 'another thing' }]
因此,我的标记模型将其名称存储为name
,而不是value
。为了响应这个ajax请求,我创建了以下标记#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
然后在我的控制器中,我简单地调用:
def index
@tags = Tag.where("name LIKE ?", params[:value]+"%" )
respond_to do |format|
format.js { render :json => @tags.map(&:to_value) }
end
end
好,短,简单。我更喜欢它。谢谢 如果我必须重构它,我会这样做:
def index
tags = Tag.where(:name => params[:value])
@results = tags.each.inject([]) do |arr, tag|
arr << { :value => tag.name }
end
respond_to do |format|
format.json { render :json => @results }
end
end
我没用这个,但你给了我一个好主意。见原问题注释。谢谢你的帮助!
def index
tags = Tag.where(:name => params[:value])
@results = tags.each.inject([]) do |arr, tag|
arr << { :value => tag.name }
end
respond_to do |format|
format.json { render :json => @results }
end
end
def index
@tags = Tag.where(:name => params[:value])
@tags.collect!{ |tag| {:value => tag.name} }
respond_to do |format|
format.json { render :json => @tags }
end
end