2016-03-19 9 views
1

私は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) 

これは、私はちょうどそれが静かZ破棄し、まだオブジェクトを作成したいNoMethodError: undefined method 'z=' で失敗します。

初期化メソッドをオーバーライドしてカリングメソッドを挿入しようとしましたが、動作していませんでした。どうやら大量の属性を割り当てることは、オブジェクト作成中に別の経路を通っているようです。

これらの属性を削除する最もよい方法はありますか?

+0

興味深い質問は、ギタバブ問題をvirtusに投稿する価値があります –

答えて

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"> 
関連する問題