Rails,DEVISE - 防止用户更改其电子邮件地址

时间:2010-11-16 02:03:46

标签: ruby-on-rails ruby-on-rails-3 devise

当用户在我的应用程序上注册时,他们必须确认他们的电子邮件,由Devise + Rails 3提供支持。

电子邮件地址定义了用户的权限,因此我不希望用户在注册后能够更改它。删除:来自users.rb attr_accessible的电子邮件,该电子邮件适用于登录用户,但现在用户无法注册。

处理此问题的正确方法是什么?因此,用户无法更新他们的电子邮件,但可以使用设计注册他们的电子邮件。

由于

3 个答案:

答案 0 :(得分:4)

这是自定义验证器的完美案例。从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

答案 1 :(得分:2)

attr_readonly:电子邮件

这很容易解决问题。

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

答案 2 :(得分:0)

我个人会留下attr_accessible:电子邮件,只需从编辑视图中删除电子邮件字段即可。此外,您还需要从更新操作中的params散列中删除任何电子邮件参数。