ruby-on-rails – attr_protected仅用于更新?

我希望能够保护帐户的电子邮件字段不被更新,但不能在首次创建帐户记录时保护.

我尝试了以下方法:

validate :email_is_unchanged, :on => :update
def email_is_unchanged
    errors.add :email, "can only be changed through confirmation" if email_changed?
end

但是当我尝试执行以下操作时(使用数据库中的现有记录):

a = Account.first

a.update_attributes({:email =>
“email@example.com”)}

它返回true但不保存记录.检查错误表明添加了验证方法的错误.

有一个更好的方法吗?

最佳答案 请尝试以下方法:

class Account < ActiveRecord::Base
    attr_readonly :email
end

这允许使用电子邮件创建新记录,但不允许后续更新.

点赞