与虚拟属性激活模型串行器 - 轨道4(active model serializer with vi

2019-09-28 12:53发布

我目前正在与API回报率,我需要建立虚拟的属性和相关对象的对象。

问题是,当我返回与虚拟属性的对象序列化并不一命呜呼

下面是从foo_controller返回的对象

{
    :id=>280, 
    :virtual=>"y8st07ef7u"
    :user_id=>280
}

:虚拟是虚拟属性和user_id是关联表的一个id - 用户。

我的目标是使这

{
    :id=>280,
    :virtual=>"y8st07ef7u",
    :user=>{
            :id=>280,
            :name=>'foo'
    }
}

Foo_controller设置

class Api::V1::FoosController < ApplicationController
    foos = Foo.all
    foos.each do |foo|
       foo.set_attribute('y8st07ef7u')
    end
    render json: foos.to_json(:methods => :virtual), status: 200 
end

Foo_model设置

class Foo < ActiveRecord::Base

    belongs_to :user

    attr_accessor:virtual

    def set_attribute(path)
        self.virtual = path
    end
end

Foo_serializer设置

class FooSerializer < ActiveModel::Serializer
    attributes :id, :virtual
    has_one :user
end

富迁移设置

class CreateFoos < ActiveRecord::Migration
    def change
        create_table :foo do |t|

            t.references :user

        end
    end
end

用户模型

class User < ActiveRecord::Base  
   has_many :foos
end

用户串行

class UserSerializer < ActiveModel::Serializer
    attributes :id, :name
    belongs_to :foo
end

当我替换“foo.to_json(:方法=>:虚拟)”与“FOOS”,串行器踢foo_controller和我得到返回的JSON代替USER_ID内部的用户的对象,但:虚拟不在JSON。

有没有我可以得到一个对象使用主动型串行两个虚拟的属性和相关对象的任何方式。

预先感谢您的帮助!

Answer 1:

我想通了。 这是非常简单的。

我不得不加上“:虚拟”到属性在foo_serializer和替换“foo.to_json(:方法=>:虚拟)”只用“FOOS”



文章来源: active model serializer with virtual attribute - Rails 4