Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 具有虚拟属性的活动模型序列化程序-Rails 4_Ruby On Rails_Ruby_Api_Ruby On Rails 4_Serialization - Fatal编程技术网

Ruby on rails 具有虚拟属性的活动模型序列化程序-Rails 4

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

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

问题是,当我返回一个具有虚拟属性的对象时,序列化程序并没有启动

这是从foo_控制器返回的对象

{
    :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”