【问题标题】:ActiveModel::Serializer not returning valid JSON in rails console testActiveModel::Serializer 在 Rails 控制台测试中未返回有效的 JSON
【发布时间】:2016-05-23 22:09:19
【问题描述】:

我对 Rails 比较陌生,这是我第一次使用 ActiveModel:Serializer。我只是想设置一个简单的序列化程序并在 Rails 控制台中对其进行测试,然后再继续。它似乎正在使用序列化程序,但没有返回有效的 JSON 格式。根据我正在处理的说明(我是学生),我似乎应该收到 JSON。过去几个小时我一直在研究,但一切似乎都无关紧要,或者超出了我的想象。

我的用户模型:

class User < ActiveRecord::Base
    # User has attributes: first_name, last_name, email, password
    has_many :lists

    def full_name
        first_name + " " + last_name
    end
end

我的用户序列化器:

class UserSerializer < ActiveModel::Serializer
    attributes :id, :full_name, :email

    def full_name
        object.full_name
    end
end

Rails 控制台中的命令:

>> User.create(first_name: "Jane", last_name: "Doe", email: "test@fake.com")
>> UserSerializer.new(User.first).as_json

控制台返回:

=> {"user"=>{:id=>1, :full_name=>"Jane Doe", :email=>"test@fake.com"}}

【问题讨论】:

    标签: ruby-on-rails json serialization


    【解决方案1】:

    as_json 构造一个 Ruby 哈希,随后可以由序列化库“序列化”(转换为字符串)。

    请尝试致电 to_json。这个方法会返回一个可以解析的字符串。

    >> User.create(first_name: "Jane", last_name: "Doe", email: "test@fake.com")
    >> UserSerializer.new(User.first).to_json
    
    => "{\"user\":{\"id\":1,\"full_name\":\"Jane Doe\",\"email\":\"test@fake.com\"}}"
    

    使用JSON.parse 将字符串反序列化回哈希:

    >> JSON.parse({"user"=>{:id=>1, :full_name=>"Jane Doe", :email=>"test@fake.com"}}.to_json)
    => {"user"=>{"id"=>1, "full_name"=>"Jane Doe", "email"=>"test@fake.com"}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 2019-11-29
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      相关资源
      最近更新 更多