如何在创建virtus对象之前剔除属性?

时间:2016-03-19 20:53:44

标签: ruby-on-rails ruby virtus

我的哈希值比Virtus在其类中定义的更多属性。我想在实例化之前在virtus模型中剔除这些属性。

test_hash = {:x="stuff" , :y ="stuff2", :z="stuff3"}
def myObject
  include Virtus.model
  attribute :x, String
  attribute :y, String
end

myObject.new(test_hash)

此操作因NoMethodError: undefined method 'z='而失败 我只是想让它静静地丢弃z并仍然创建对象。

我尝试重写initialize方法并插入剔除方法,但这似乎不起作用。在对象创建期间,显然质量分配属性会经历不同的路径吗?

剔除这些属性的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

似乎可以正常使用1.0.5;你在哪个版本?

irb(main):001:0> require 'virtus'
=> true
irb(main):002:0> class MyObject
irb(main):003:1>   include Virtus.model
irb(main):004:1>   attribute :x, String
irb(main):005:1>   attribute :y, String
irb(main):006:1> end
=> MyObject
irb(main):007:0> hash = { x: 'x', y: 'y', z: 'z' }
=> {:x=>"x", :y=>"y", :z=>"z"}
irb(main):008:0> MyObject.new hash
=> #<MyObject:0x007ff0e3e8d9e8 @x="x", @y="y">