Ruby 禁用virtus属性的写入程序

Ruby 禁用virtus属性的写入程序,ruby,Ruby,我在ruby类中使用virtus进行属性定义: class Client include Virtus.model attribute :api_token, String end 现在我想禁用api_令牌设置器,使其仅在初始化时工作: client = Client.new(api_token: 'test_token') client.api_token='new_token' #this should not work 我如何才能做到这一点?您需要使用: cl

我在ruby类中使用virtus进行属性定义:

  class Client
    include Virtus.model

    attribute :api_token, String
  end
现在我想禁用api_令牌设置器,使其仅在初始化时工作:

client = Client.new(api_token: 'test_token')
client.api_token='new_token' #this should not work
我如何才能做到这一点?

您需要使用:

class ReadOnlyString
另一个选择是

顺便说一句,
Virtus
有一个很棒的自述文件

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

class Client
  include Virtus.model

  attribute :api_token, ReadOnlyString
end