2015-06-25 15 views
1

我使用屬性定義VIRTUS在我的Ruby類:爲VIRTUS attribiute禁用作家

class Client 
    include Virtus.model 

    attribute :api_token, String 
    end 

現在我想禁用api_token二傳手僅在初始化工作:

client = Client.new(api_token: 'test_token') 
client.api_token='new_token' #this should not work 

如何我可以這樣做嗎?

回答

1

您需要使用custom coercion

class ReadOnlyString < Virtus::Attribute 
    def coerce(value) 
    raise 'Finalized' 
    end 
end 

class Client 
    include Virtus.model 

    attribute :api_token, ReadOnlyString 
end 

其他選項將override a setter

Virtus有一個很棒的自述,順便說一下。