Rails 5 の attributes API に新しい型を追加する
2020年10月13日
Rails 5 の attributes API を使うと、フォームオブジェクトをとても簡単に作れます。
以前はメールアドレスを小文字化するために after_initialize コールバックを使っていましたが、次のコードで :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'