【发布时间】:2020-08-28 07:53:45
【问题描述】:
我已经在这个问题上停留了一段时间,我似乎找不到任何解决方案(我已经四处寻找答案,但在这种情况下对我没有任何帮助)
我的模型 Place 中有一个 jsonb 列类型:
t.jsonb :location
我有地图 API 返回这种类型的对象:
data = {lat: 52.13661911521592, lng:12.277604312500014}
那我变成了一个字符串(否则只会返回[object Object]:
JSON.stringify(data)
{"lat":52.13661911521592,"lng":12.277604312500014}
我正在尝试将此对象存储到我的 jsonb 列中,但每次我发布时,rails 都会返回这些参数:
"place"=>{"location"=>"{\"lat\":52.13661911521592,\"lng\":12.277604312500014}"}
我不能像往常一样查询 Place.first.location['lat'],因为它返回的是 => 'lat' 而不是值...
我试过serialize: :location,我试过在参数上做to_json,唯一看起来它可以以某种方式工作的事情是如果我像这样解析参数:
location = JSON.parse(params['place']['location'])
params['place']['location'] = location
但显然它返回blank...
我之前在相同的场景中使它工作(相同的列类型,相同类型的参数和对象),但我使用的是 rails_admin,它做到了:
<%= form.send :hidden_field, field.method_name, value: form.object.location.to_json %>
在发布之前在字符串化的对象上,我似乎无法弄清楚为什么我不能让它再次工作。 (我可以创建一个hidden_field 来访问对象form.object 而不会让它变得太复杂吗?)
提前感谢您的帮助!
【问题讨论】:
-
这似乎是一个非常复杂的解决方案,而不是仅将坐标存储在两列中,如果您打算将坐标用于地理空间查询,则会有很大的缺点。
-
我实际上将它们存储在 2 列中,但由于我只将它们用于 Maps API,我不妨按原样存储它们(在我的情况下,与 Maps 集成实际上更容易)
标签: ruby-on-rails postgresql jsonb