Menambahkan Tipe Baru ke Attributes API Rails 5
Attributes API di Rails 5 memungkinkan kita membuat form object dengan sangat mudah.
Sebelumnya saya menggunakan callback after_initialize untuk mengubah email menjadi huruf kecil. Dengan kode berikut, saya dapat mendefinisikan tipe data :email dan nilainya otomatis di-cast saat di-set.
Keuntungannya, pemanggilan berikutnya untuk men-set nilai email juga ikut di-cast.
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'