在 rails 响应对象中呈现来自 mysql 数据库的 json 数据字段
Rendering json data fields from mysql db in rails response object
我有一个 rails 4.2 应用程序,它使用支持 json 字段的 mysql db 5.7。所以我的用户模型有一个名为 display_pic 的字段,它是一个 json 对象。
class User < ActiveRecord::Base
serialize :display_pic, JSON
....
在动作中get_user我渲染用户如下
def get_user
@u = User.where(...)
render json: { user: @u }
end
问题是 json 字段 display_pic
不是嵌套的 json 对象,而是呈现为字符串。我希望收到如下回复
{
"user": {
"name": "some name",
"email": "some email",
"display_pic": {
"url": "http://someurl.com",
"width": "400px",
}
}
}
使用下面的代码可以解决你的问题:
def get_user
@u = User.where(...)
render json: { user: JSON.parse(@u)}
end
您尝试过使用方法 .as_json 吗?
def get_user
@u = User.where(...)
render json: @u.as_json
end
您应该不需要设置序列化 :display_pic, :JSON,但您可以在 user.rb class 中重载该方法以便继续响应引用或方法结果自动加载到您的前端:
class PlayerCharacter < ApplicationRecord
[...]
def as_json(options = {})
super(options.merge(include: [ :reference1, :reference2]).merge(methods: [:method_name1, :method_name2])
end
end
编辑:
您可以添加 display_pic 如下:
class PlayerCharacter < ApplicationRecord
[...]
def as_json(options = {})
super(options.merge(include: [ :display_pic])
end
end
可能是更好的方法,但您可以在序列化程序中将其格式化为 json。
class UserSerializer < ActiveModel::Serializer
attribute :name
attribute :email
attribute :display_pic
def display_pic
JSON.parse(object.display_pic)
end
end
我有一个 rails 4.2 应用程序,它使用支持 json 字段的 mysql db 5.7。所以我的用户模型有一个名为 display_pic 的字段,它是一个 json 对象。
class User < ActiveRecord::Base
serialize :display_pic, JSON
....
在动作中get_user我渲染用户如下
def get_user
@u = User.where(...)
render json: { user: @u }
end
问题是 json 字段 display_pic
不是嵌套的 json 对象,而是呈现为字符串。我希望收到如下回复
{
"user": {
"name": "some name",
"email": "some email",
"display_pic": {
"url": "http://someurl.com",
"width": "400px",
}
}
}
使用下面的代码可以解决你的问题:
def get_user
@u = User.where(...)
render json: { user: JSON.parse(@u)}
end
您尝试过使用方法 .as_json 吗?
def get_user
@u = User.where(...)
render json: @u.as_json
end
您应该不需要设置序列化 :display_pic, :JSON,但您可以在 user.rb class 中重载该方法以便继续响应引用或方法结果自动加载到您的前端:
class PlayerCharacter < ApplicationRecord
[...]
def as_json(options = {})
super(options.merge(include: [ :reference1, :reference2]).merge(methods: [:method_name1, :method_name2])
end
end
编辑: 您可以添加 display_pic 如下:
class PlayerCharacter < ApplicationRecord
[...]
def as_json(options = {})
super(options.merge(include: [ :display_pic])
end
end
可能是更好的方法,但您可以在序列化程序中将其格式化为 json。
class UserSerializer < ActiveModel::Serializer
attribute :name
attribute :email
attribute :display_pic
def display_pic
JSON.parse(object.display_pic)
end
end