【问题标题】:active model serializer with virtual attribute - Rails 4具有虚拟属性的活动模型序列化器 - Rails 4
【发布时间】:2015-02-04 03:08:37
【问题描述】:

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

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

这是 foo_controller 返回的对象

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

:virtual 是一个虚拟属性,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

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

当我将 foo_controller 中的“foo.to_json(:methods => :virtual)”替换为“foos”时,序列化程序会启动,并且我在返回的 json 中得到一个用户对象而不是 user_id,但 :virtual 不在json。

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

提前感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby api ruby-on-rails-4 serialization


    【解决方案1】:

    我想通了。很简单。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多