jpw*_*ynn 7 ruby-on-rails exception rescue
在我的应用程序中,我有时会动态创建用户,并且用户的电子邮件必须是有效的格式,并且是唯一的.
我想重定向到不同的地方取决于WHICH验证导致错误:无效格式与重复.
在我的代码中我有
begin
user.save!
flash[:notice] = "Created new user #{email} with password #{password}"
rescue ActiveRecord::RecordInvalid => e
flash[:alert] = "Failed to create account because #{e.message}"
redirect_to SOMEPLACE
end
Run Code Online (Sandbox Code Playgroud)
如果电子邮件格式无效(例如"user @ example"),则e.message为"验证失败:电子邮件无效"
如果表格中已存在该电子邮件,则e.message为"验证失败:已收到电子邮件"
我讨厌解析e.message文本以确定原因的想法......救援处理程序是否有更好的方法来检测抛出ActiveRecord :: RecordInvalid异常的根本原因?
PS我知道在这个例子中,我可以在进行保存之前简单地检查已经存在的电子邮件,但我正在尝试理解检测和处理不同验证失败的一般解决方案,抛出相同的异常.
执行此操作的标准 Rails 方法不是使用 bang 运算符(这会引发异常),而是使用标准 save 方法并检查它返回的是 true 还是 false:
if @user.save
flash[:notice] = "User created."
redirect_to :action => :index
else
flash[:alert] = "User could not be created."
render :action => :new
end
Run Code Online (Sandbox Code Playgroud)
在您的用户创建视图中:
<% if @user.errors.any? %>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1172 次 |
| 最近记录: |