Rails, DEVISE - предотвращение изменения пользователем адреса электронной почты - PullRequest
2 голосов
/ 16 ноября 2010

Когда пользователь регистрируется в моем приложении, он должен подтвердить свою электронную почту на основе Devise + Rails 3.

Адрес электронной почты определяет права пользователя, поэтому я не хочу, чтобы пользователь мог изменить его после регистрации. удалено: электронная почта от users.rb attr_accessible, которая работала для вошедшего в систему пользователя, но теперь пользователь не может зарегистрироваться.

Какой правильный способ справиться с этим? Таким образом, пользователи не могут обновить свою электронную почту, но могут зарегистрироваться с помощью электронной почты devise.

Спасибо

Ответы [ 3 ]

4 голосов
/ 16 ноября 2010

Это идеальный случай для пользовательского валидатора.Начиная с Rails3, их гораздо проще сделать, чем раньше.

class ImmutableValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    record.errors[attribute] << "cannot be changed after creation" if record.send("#{attribute}_changed?") && !record.new_record?
  end
end

class User < ActiveRecord::Base
  validates :email, :immutable => true
end
2 голосов
/ 21 июля 2013

attr_readonly: электронная почта

Это легко решило проблему.

https://groups.google.com/forum/#!topic/plataformatec-devise/skCarCHr0p8

0 голосов
/ 16 ноября 2010

Я бы лично оставил attr_accessible для: email и просто удалил поле электронной почты из представления редактирования. Кроме того, вы захотите удалить любой параметр электронной почты из хэша params в действии обновления.

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