إضافة أنواع جديدة إلى واجهة attributes API في Rails 5
13 أكتوبر 2020
تتيح لنا واجهة attributes API في Rails 5 بناء كائنات النماذج (form objects) بسهولة كبيرة.
كنت أستخدم سابقًا callback من نوع 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'