【问题标题】:Ruby's Virtus gem vs attr_accessorRuby 的 Virtus gem 与 attr_accessor
【发布时间】:2016-09-20 13:46:13
【问题描述】:

我正在查看一些关于 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 gem 的好处以及它在几行中的作用,它会是什么?

【问题讨论】:

    标签: ruby-on-rails virtus


    【解决方案1】:

    Virtus 的目标可以概括为尝试使属性更加“Rails-y”。它们支持解析表单/JSON、封装while retaining type information 以及其他一些获得常规属性并非不可能的事情,但也不容易。

    然而,真正的好处在于将 Virtus 与 ActiveModel::Validations per this post 结合使用。由于您的基本值对 Rails 表单助手的期望变得更加敏感,因此您拥有一个非常强大的嵌套表单替代方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2013-01-03
      • 2013-01-30
      • 2015-01-08
      相关资源
      最近更新 更多