2016-02-11 19 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響應中的對象,並且可以選擇序列化它們。

如果你不希望序列化的用戶(好像你會想,真的是合適的),然後傳遞falseeach_serializer選項。

無論是上述解決方案會產生這樣的事情(我在填補空白):

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