具有虚拟属性的活动模型序列化程序 – 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”