在我的控制器中我有:
def search
@sog = Konkurrencer.where("titel like ?", "%#{params[:q]}%")
@kate = []
@sog.each do |kat|
h = {}
kat.attributes.each{|k,v| h[k] = v.respond_to?(:force_encoding) ? v.dup.force_encoding("UTF-8") : v }
@kate << h
end
respond_to do |format|
format.html
format.json { render :json => @kate }
end
问题是JSON包含模型的所有属性。如何创建仅具有ID,URL和标题的JSON?
JSON还应包含密钥“url”,该密钥应该是关联照片的URL。我用回形针。路径为:@konkurrencer.photo.image.url
更新 我的search.json.erb:
[
<% @sog.each do |kon| %>
{"id":"<%= kon.id %>","titel":"<%= kon.titel %>"},
<% end %>
]
如何移除最后一个循环?
答案 0 :(得分:1)
答案 1 :(得分:1)
使用要显示的属性列表创建一个数组。使用select
查询方法仅在SQL请求中获取此字段。最后循环使用此属性来填充JSON数组:
def search
displayed_attributes = %w{id url titel}
@sog = Konkurrencer.select(displayed_attributes.join(',')).where("titel like ?", "%#{params[:q]}%")
@kate = []
@sog.each do |kat|
h = {}
displayed_attributes.each do |attribute|
v = kat[attribute]
h[attribute] = v.respond_to?(:force_encoding) ? v.dup.force_encoding("UTF-8") : v
end
@kate << h
end
respond_to do |format|
format.html
format.json { render :json => @kate }
end
end