在Rails响应对象中从mysql db渲染json数据字段

时间:2018-08-06 12:16:38

标签: ruby-on-rails json serialization rails-api

我有一个使用MySQL db 5.7的rails 4.2应用程序,该数据库支持json字段。所以我的用户模型有一个名为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",
      }
   }
}

3 个答案:

答案 0 :(得分:1)

可能是一种更好的方法,但是您可以在序列化程序中将其格式化为json。

{{obj.first}}{{obj.second}}

答案 1 :(得分:0)

使用以下代码将解决您的问题:

def get_user
  @u = User.where(...)
  render json: { user: JSON.parse(@u)}
end

答案 2 :(得分:0)

您是否尝试过使用.as_json方法?

def get_user
  @u = User.where(...)
  render json: @u.as_json
end

您不需要设置serialize:display_pic,:JSON,但是您可以在user.rb类中重载该方法,以获取响应引用或以合法方式加载到前端的方法结果:

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