我正在生成JSON,如下所示:
def suggest_gems
@allgems = RubyGem.where("name like ?", "%#{params[:q]}%")
respond_to do |format|
format.json { render :json => @allgems.to_json }
end
end
但是,RubyGem表非常大,具有描述,链接和创建的值,更新于。我怎样才能在生成的JSON中输出名称和id以减少加载时间? 感谢。
答案 0 :(得分:2)
你可以在那里清理你的控制器方法并达到你想要的效果:
def suggest_gems
@allgems = RubyGem.where("name like ?", "%#{params[:q]}%")
respond_with(@allgems, :only => [:id, :name])
end
如果你在控制器的顶部有这个:
respond_to :json
修改
如果您不想使用respond_to
,请执行以下操作:
def suggest_gems
@allgems = RubyGem.where("name like ?", "%#{params[:q]}%")
render :json => @allgems.as_json(:only => [:id, :name])
end
答案 1 :(得分:1)
您需要覆盖模型中的as_json
,以便仅返回您要发回的属性。
def as_json(options)
super(only: [:id, :name])
end
答案 2 :(得分:0)
所以我想通过添加几行代码来计算如何在不更改as_json
方法或使用respond_with
语句的情况下执行此操作。这是我做的:
def suggest_gems (result = [])
@allgems = RubyGem.where("name like ?", "%#{params[:q]}%")
@allgems.each { |g|
result << { :id => g.id, :name => g.name }
}
respond_to do |format|
format.json { render :json => result.to_json }
end
end
我基本上定义了一个数组并相应地关联了name
和id
属性,然后将数组格式化为JSON。在加载时间约6秒钟剃光:)
在此处添加此答案,以便其他人可能会发现它有用!