Как отбирать атрибуты перед созданием Объекта Виртуса?

У меня в хэше больше атрибутов, чем Виртус определил в своем классе. Я хочу отбросить эти атрибуты внутри модели виртуса, прежде чем создавать ее.

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 ответ

Решение

Кажется, работает нормально с 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">
Другие вопросы по тегам