具有虚拟属性的活动模型序列化程序 – Rails 4

我目前正在使用RoR制作API,我需要创建一个具有虚拟属性和关联对象的对象。

问题是当我返回具有虚拟属性的对象时,序列化程序不会启动。

这是foo_controller返回的对象

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

:virtual是虚拟属性,user_id是关联表的ID – User。

我的目标是做到这一点

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

Foo_controller设置

 class Api::V1::FoosController  :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 

Foo迁移设置

 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 

当我用“foos”替换foo_controller中的“foo.to_json(:methods =>:virtual)”时,序列化器启动并在返回的json而不是user_id中获取用户对象,但是:virtual不在json中。

有什么方法可以使用活动模型序列化器获取具有虚拟属性和关联对象的对象。

预先感谢您的帮助!

我想通了。 这很简单。

我只需要在foo_serializer中为属性添加“:virtual”,并将“foo.to_json(:methods =>:virtual)”替换为“foos”