我正在查看有关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的好处及其在几行代码中的作用,那会是什么?

最佳答案

Virtus的目标可以概括为试图使属性多一点“ Rails-y”。它们提供了对表单/ JSON,封装while retaining type information的解析以及其他一些功能的支持,这并非不可能使常规属性完成,但也不容易。

但是,将Virtus与每个this postActiveModel::Validations结合使用才可以带来真正的好处。由于您的基本价值观已对Rails表单助手的期望做出了更迅速的响应,因此您可以使用嵌套表单作为替代。

10-08 01:37