0
UserProfileクラスを持つUserクラスがあります。私のuser_profiles#edit
メソッドから、私はこの電子メールアドレスを更新したいと思います。Rails 3関連モデルのフィールドの検証
電子メールフィールドに検証を配置するにはどうすればよいですか?
私のクラスでは、このようなものになります(明らかに右ではないが、しかし、あなたのアイデアを得る):
class UserProfile < ActiveRecord::Base
belongs_to :user
validates :first_name, :presence => true
validates :last_name, :presence => true
validates :email, :presence => true, :uniqueness => true, :email_format => true
def email=(email)
self.user.email = email
self.user.save
end
end
マイフォームパラメータは以下のようになります。
{
"user_profile" => { "first_name" => "John", "email" => "qwerty", ....
}
EmailValidatorはちょうどから取られますRailscasts:
class EmailFormatValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
object.errors[attribute] << (options[:message] || "is not formatted properly")
end
end
end
しかし、UserProfileにカスケードすることはありません。フォームはupdate_attributesを呼び出すときに電子メールアドレスは実際には変更されませんでしたが、正常に保存されたと表示されます。 – Dex
確かに、私は私の答えを更新しました。 –