2017-09-27 59 views
0
class User < ApplicationRecord 
    enum status: [ :active, :inactive ] 
end 

默認情況下,主動型串行序列化User對象的status屬性爲一個字符串,要麼"active""inactive",但我想它是整數01。要做到這樣,我必須手動做到這一點:如何讓主動型串行自動轉換枚舉屬性爲整數

class UserSerializer < ActiveModel::Serializer 
    attributes :status 
    def status 
    object.status_before_type_cast # get integer 
    # or User.statuses[object.status], the same thing 
    end 
end 

這是一個有點難看,因爲我必須編寫代碼爲每個活動模型類每個枚舉屬性。有沒有選擇做一次?

回答

0

您可以訪問枚舉索引值如哈希

User.statuses[:active] 
=> 0 
User.statuses[:inactive] 
=> 1 

我希望這是你在尋找什麼

http://api.rubyonrails.org/v5.1/classes/ActiveRecord/Enum.html

+0

感謝您指出。我意識到了這一點,但是我正在尋找一個讓AMS自動執行此操作的選項,否則將在序列化程序定義中爲每個枚舉屬性設置一個方法,如上例中的'status'。 – user10375

0

枚舉狀態:{活躍:0,未激活: 1}

Model.statuses # Pluralized version of the enum attribute name 

返回哈希像:

=> { 「活性」=> 0, 「不活動」=> 1}

然後可以使用從的一個實例的狀態值Model類來訪問整數值爲該實例:

my_model = Model.find(123) 

Model.statuses[my_model.status] # Returns the integer value 

https://www.sitepoint.com/enumerated-types-with-activerecord-and-postgresql/

+0

這並不能解決爲其序列化程序類中的每個活動模型類的每個枚舉屬性編寫代碼的問題。 – user10375