2016-02-11 1 views
0

Я имею Организация сериалайзер следующим образом:Определение нескольких атрибутов в рельсах AMS

class OrganizationSerializer < ActiveModel::Serializer 
    attributes :user_first_name, 
      :user_last_name, 
      :user_email 

    has_many :user 

    def user_first_name 
    object.user.first_name 
    end 

    def user_last_name 
    object.user.last_name 
    end 

    def user_email 
    object.user.email 
    end 

end 

Мой вопрос, есть ли лучший способ, чтобы не повторять пользователя четкости _... для каждого определения атрибута?

+0

Совсем другой (может быть лучше) способ будет гнездиться объект пользователя при организации. и использовать ассоциации AMS. Поэтому UserSerializer заботится о ': first_name,: last_name,: email'. И организация заканчивается ключом пользователя. – Leito

ответ

0

На мой взгляд, лучший курс действий будет делать это как ниже фрагмент кода:

has_many :users, each_serializer: YourUserSerializer 

Другой вариант:

attributes :users 

def users 
    ActiveModel::ArraySerializer.new(object.users, each_serializer: YourUserSerializer) 
end 

Это позволяет получить обратно массив объектов в вашем ответе JSON, а также возможность их сериализации.

Если вы не хотите сериализовать пользователей (кажется, что вы хотите, и действительно это необходимо), перейдите false в опцию each_serializer.

либо из вышеперечисленных решений будет производить что-то вроде этого (я заполняю пробелы):

{ 
    "organization": { 
    "users": [{ 
     "first_name": "John", 
     "last_name": "Doe", 
     "email": "[email protected]" 
    }] 
    } 
}