ActiveRecord将row_to_json渲染为转义字符串,如何呈现为纯JSON?

时间:2014-06-14 00:59:53

标签: ruby-on-rails json rails-activerecord

我正在尝试通过row_to_json从PostGres数据库中提取JSON,但是当我使用类似的东西渲染它时:

render :status => 200, :json => sports

[{"row_to_json"=>"{\"id\":1,\"name\":\"Basketball\"}"}
{"row_to_json"=>"{\"id\":2,\"name\":\"Football\"}"}
{"row_to_json"=>"{\"id\":3,\"name\":\"Baseball\"}"}]

它将row_to_json的值视为转义字符串,而不是json。

有没有一种简单的方法可以将其转换为适当的JSON对象,这比执行类似这样的蛮力方式更好:

new_sports_array = Array.new()
sports.each do |sport|
  new_sports_array.push(JSON.parse(sport[:]))
end

我假设上述内容可能会对我的api征收不必要的税。

谢谢!

3 个答案:

答案 0 :(得分:2)

嘿,请试试这个,

new_sports_array = []
sports.select{|s| new_sports_array << JSON.parse(s['row_to_json'])}

答案 1 :(得分:1)

您可以使用标准的Rails操作吗?

def show_sports
  sports = Sports.where(conditions)
  render json: sports
end

答案 2 :(得分:1)

如果你有一个json字符串,你应该可以这样做:

render text: <your json string>, content_type: 'application/json'

这将帮助您避免Rails创建的内置to_json调用。