Ruby 的 Virtus gem 与 attr_accessor

fra*_*ank 5 ruby-on-rails virtus

我正在查看一些关于 Ruby 中服务对象的教程中使用的 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
Run Code Online (Sandbox Code Playgroud)

我可以看到该示例是如何工作的,但想了解这与在 Ruby 中定义 attr_accessors 有什么不同?如果我必须用几行内容向某人解释包含 Virtus 宝石的好处及其作用,我会解释什么?

Jim*_*eet 4

Virtus 的目标可以概括为尝试使属性更加“Rails-y”。它们提供对解析表单/JSON、封装同时保留类型信息的支持,以及其他一些事情,常规属性并非不可能完成,但也不容易。

ActiveModel::Validations然而,当您将 Virtus与这篇文章结合起来时,真正的好处就会出现。由于您的基本值已变得更加符合 Rails 表单助手的期望,因此您拥有了嵌套表单的非常强大的替代方案。