Rails 3 валидации на поле из родственной модели - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть класс User, который имеет класс UserProfile. Электронная почта хранится в таблице «Пользователь», потому что им необходимо войти в нее, однако из моего метода user_profiles#edit я бы хотел обновить этот адрес электронной почты.

Как я могу разместить проверки в поле электронной почты?

Мой класс выглядит примерно так (очевидно, неправильно, но вы поняли):

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  

1 Ответ

2 голосов
/ 10 февраля 2011

Вы можете поставить свою проверку в пользовательской модели.Когда вы вызываете save для пользовательской модели, тогда проверяются эти проверки.

И вам нужно добавить следующее в ассоциацию:

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

И удалить вызов сохранения из электронного письма =метод, потому что теперь пользователь сохраняется автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...