Ruby的Virtus gem和attr_accessor

时间:2016-09-20 13:46:13

标签: ruby-on-rails virtus

我正在查看有关Ruby中Service对象的一些教程中使用的Virtus gem。在github页面https://github.com/solnic/virtus中,它给出了以下示例。

将Virtus与类一起使用

您可以创建使用Virtus扩展的类并定义属性:

class User   include Virtus.model
  attribute :name, String   
  attribute :age, Integer   
  attribute :birthday, DateTime 
end

user = User.new(:name => 'Piotr', :age => 31) user.attributes # => { :name => "Piotr", :age => 31, :birthday => nil }

user.name # => "Piotr"

user.age = '31' # => 31 user.age.class # => Fixnum

user.birthday = 'November 18th, 1983' # => #<DateTime: 1983-11-18T00:00:00+00:00 (4891313/2,0/1,2299161)>

# mass-assignment user.attributes = { :name => 'Jane', :age => 21 } user.name # => "Jane" user.age  # => 21

我可以看到这个例子是如何工作的,但是想了解它与仅仅在Ruby中定义attr_accessors有什么不同?如果我必须向某人解释,包括Virtus宝石的好处以及它在几行中做了什么,它会是什么?

1 个答案:

答案 0 :(得分:2)

Virtus的目标可以概括为尝试使属性更多一些&#34; Rails-y&#34;。它们提供了对解析表单/ JSON,封装while retaining type information以及其他一些事情的支持,它不是不可能获得常规属性,但也不容易。

然而,当您将Virtus与每this post ActiveModel::Validations结合使用时,真正的好处就来了。由于您的基本值对Rails表单助手的期望越来越敏感,因此您可以使用嵌套表单的强大替代方法。