Ruby on rails Rails设计了回滚事务';不出差错

Ruby on rails Rails设计了回滚事务';不出差错,ruby-on-rails,devise,Ruby On Rails,Devise,我有一个使用Desive作为身份验证的应用程序。我不希望用户能够更改那里的电子邮件地址。我通过在用户模型中将email属性设置为只读来实现这一点 class User < ActiveRecord::Base attr_readonly :email end 我已经尝试过几件事,包括创建我的onw methode,它会返回一个flash通知,但它一直说帐户已成功更新 当记录未成功保存时,是否有方法引发错误 在Ashvin的anwser之后编辑。这就是我的模型中的内容: def e

我有一个使用Desive作为身份验证的应用程序。我不希望用户能够更改那里的电子邮件地址。我通过在用户模型中将email属性设置为只读来实现这一点

class User < ActiveRecord::Base
    attr_readonly :email
end
我已经尝试过几件事,包括创建我的onw methode,它会返回一个flash通知,但它一直说帐户已成功更新

当记录未成功保存时,是否有方法引发错误

在Ashvin的anwser之后编辑。这就是我的模型中的内容:

def email=(address)
  begin
    if new_record?
      write_attribute(:email, address)
    end
  rescue Exception => error
    flash[:alert] = error.message
  end
end

我不知道我是否明白你的问题,但从我得到的以下是解决办法。您可以在记录回滚时使用异常处理

begin
    # do some stuff here
rescue Exception => e
    flash[:notice] = e.message
end

我试过代码,但它仍然说它成功地更新了你正在执行的操作,你能把代码粘贴到这里吗,这样我就能得到确切的想法。我已经添加了我正在使用的代码自定义代码。我认为如果电子邮件地址与参数[:email]不同,最好在控制器中进行检查。@Samuel如果您不希望用户更新那里的电子邮件地址,那么为什么您允许他/她从UI更新,只需从UI中隐藏该输入。这将非常简单。即使它隐藏在表单中,您仍然可以更改它。
begin
    # do some stuff here
rescue Exception => e
    flash[:notice] = e.message
end