2011-02-10 11 views
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 

答えて

2

ユーザーモデルに検証を入れることができます。ユーザーモデルでsaveを呼び出すと、その検証がチェックされます。

そして、あなたは協会に以下を追加する必要があります。

belongs_to :user, :validate => true, :autosave => true 

そして今、ユーザーは自動的に保存されるため、電子メール=メソッドから呼び出して保存を削除します。

+0

しかし、UserProfileにカスケードすることはありません。フォームはupdate_attributesを呼び出すときに電子メールアドレスは実際には変更されませんでしたが、正常に保存されたと表示されます。 – Dex

+0

確かに、私は私の答えを更新しました。 –

関連する問題