active model serializer with virtual attribute - Rails 4

纵然是瞬间 提交于 2019-12-24 12:42:07

问题


I am currently making API with RoR, and I need to create an object with virtual attributes and associated object.

The problem is that serializer does not kick in when I return an object with virtual attribute.

Here is the returned object from foo_controller

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

:virtual is a virtual attribute and user_id is an id of associated table - User.

My goal is to make this

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

Foo_controller setting

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 setting

class Foo < ActiveRecord::Base

    belongs_to :user

    attr_accessor:virtual

    def set_attribute(path)
        self.virtual = path
    end
end

Foo_serializer setting

class FooSerializer < ActiveModel::Serializer
    attributes :id, :virtual
    has_one :user
end

Foo migration setting

class CreateFoos < ActiveRecord::Migration
    def change
        create_table :foo do |t|

            t.references :user

        end
    end
end

user model

class User < ActiveRecord::Base  
   has_many :foos
end

user serializer

class UserSerializer < ActiveModel::Serializer
    attributes :id, :name
    belongs_to :foo
end

When I replace "foo.to_json(:methods => :virtual)" in foo_controller with "foos", serializer kicks in and I get a user object inside the returned json instead of user_id, but :virtual is not in the json.

Are there any ways I can get an object with both virtual attributes and associated object using active model serializer.

Thank you in advance for your help!


回答1:


I figured out. It was very simple.

I just had to add ":virtual" to attributes in the foo_serializer and replace "foo.to_json(:methods =>:virtual)" with just "foos"



来源:https://stackoverflow.com/questions/27324492/active-model-serializer-with-virtual-attribute-rails-4

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!