为 Rails 5 attributes API 添加自定义类型
October 13, 2020
Rails 5 的 attributes API 让我们可以非常轻松地创建 form object。
我之前都是用 after_initialize callback 把 email 转成小写,而通过下面这段代码,我可以定义一个 :email 数据类型,赋值时就会自动做类型转换。
这样做的好处是,之后任何一次给 email 赋值也都会自动转换。
class EmailType < ActiveModel::Type::String
def cast(value)
return super unless value.is_a?(String)
super(value.downcase)
end
end
ActiveModel::Type.register(:email, EmailType)
class Foo
include ActiveModel::Model
include ActiveModel::Attributes
attribute :email, :email
end
> Foo.new(email: 'EMAIL@MAIL.com').email
=> 'email@mail.com'