Ruby on rails 具有虚拟属性的活动模型序列化程序-Rails 4
我目前正在使用RoR制作API,我需要创建一个具有虚拟属性和关联对象的对象 问题是,当我返回一个具有虚拟属性的对象时,序列化程序并没有启动 这是从foo_控制器返回的对象Ruby on rails 具有虚拟属性的活动模型序列化程序-Rails 4,ruby-on-rails,ruby,api,ruby-on-rails-4,serialization,Ruby On Rails,Ruby,Api,Ruby On Rails 4,Serialization,我目前正在使用RoR制作API,我需要创建一个具有虚拟属性和关联对象的对象 问题是,当我返回一个具有虚拟属性的对象时,序列化程序并没有启动 这是从foo_控制器返回的对象 { :id=>280, :virtual=>"y8st07ef7u" :user_id=>280 } :virtual是一个虚拟属性,user_id是关联表-user的id 我的目标是让这个 { :id=>280, :virtual=>"y8st07ef
{
:id=>280,
:virtual=>"y8st07ef7u"
:user_id=>280
}
:virtual是一个虚拟属性,user_id是关联表-user的id
我的目标是让这个
{
:id=>280,
:virtual=>"y8st07ef7u",
:user=>{
:id=>280,
:name=>'foo'
}
}
Foo_控制器设置
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
class FooSerializer < ActiveModel::Serializer
attributes :id, :virtual
has_one :user
end
class Api::V1::FoosController:virtual),状态:200
结束
Foo_模型设置
class Foo < ActiveRecord::Base
belongs_to :user
attr_accessor:virtual
def set_attribute(path)
self.virtual = path
end
end
class Foo
Foo_序列化程序设置
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
class FooSerializer < ActiveModel::Serializer
attributes :id, :virtual
has_one :user
end
class FooSerializer
Foo迁移设置
class CreateFoos < ActiveRecord::Migration
def change
create_table :foo do |t|
t.references :user
end
end
end
class CreateFoos
用户模型
class User < ActiveRecord::Base
has_many :foos
end
class用户
用户序列化程序
class UserSerializer < ActiveModel::Serializer
attributes :id, :name
belongs_to :foo
end
class UserSerializer
当我将foo_控制器中的“foo.to_json(:methods=>:virtual)”替换为“foos”时,序列化程序启动,我在返回的json中得到一个用户对象,而不是用户id,但是:virtual不在json中 是否有任何方法可以使用活动模型序列化程序获取同时具有虚拟属性和关联对象的对象
提前感谢您的帮助 我明白了。这很简单 我只需要在foo_序列化程序的属性中添加“:virtual”,并将“foo.to_json(:methods=>:virtual)”替换为“foos”