ActiveModel :: Serializer在rails控制台test

时间:2016-05-23 22:09:19

标签: ruby-on-rails json serialization

我对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

我的UserSerializer:

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"}}

1 个答案:

答案 0 :(得分:0)

as_json构造一个Ruby Hash,随后可以&#34;序列化&#34; (通过序列化库转换为字符串。

请尝试拨打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"}}