2 要素認証を使用する Rails アプリに取り組んでいます。このアプリのUser
モデルには、属性がありますtwo_factor_phone_number
。モデルを保存する前に、この属性が存在することを検証するモデルがあります。
電話番号が適切な形式で保存されていることを確認するために、次のようなカスタム属性割り当てメソッドを作成しました。
def two_factor_phone_number=(num)
num.gsub!(/\D/, '') if num.is_a?(String)
self[:two_factor_phone_number] = num.to_i
end
私はいくつかの受け入れテストを行っており、このメソッドがモデル内にある場合、ActiveRecord 検証が無視/スキップされ、新しいモデルをtwo_factor_phone_number
セットなしで作成できることがわかりました。
モデル コードは次のようになります。
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable,
:lockable
attr_accessible :email, :password, :password_confirmation, :remember_me,
:first_name, :last_name, :two_factor_phone_number
validates :first_name, presence: true
validates :last_name, presence: true
validates :two_factor_phone_number, presence: true
# Removes all non-digit characters from a phone number and saves it
#
# num - the number to be saved
#
# Returns the digit-only phone number
def two_factor_phone_number=(num)
num.gsub!(/\D/, '') if num.is_a?(String)
self[:two_factor_phone_number] = num.to_i
end
end