【问题标题】:How to cull attributes before creating a virtus Object?如何在创建虚拟对象之前剔除属性?
【发布时间】:2016-03-19 20:53:44
【问题描述】:

我的哈希中的属性比 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 并仍然创建对象。

我尝试覆盖初始化方法并插入一个剔除方法,但这似乎不起作用。显然,在对象创建期间批量分配属性会通过不同的途径?

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

【问题讨论】:

  • 有趣的问题,可能值得在 virtus 上发布一个 github 问题

标签: ruby-on-rails ruby 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">

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2016-11-29
    相关资源
    最近更新 更多