gpt4 book ai didi

ruby-on-rails - rails 3.1:应用程序如何为 ActiveRecord::RecordInvalid 处理不同的 'reasons'(例如,重复与验证错误)

转载 作者:行者123 更新时间:2023-12-04 12:55:48 25 4
gpt4 key购买 nike

在我的应用程序中,我有时会即时创建一个用户,并且用户的电子邮件必须是有效格式并且是唯一的。

我想根据导致错误的验证重定向到不同的地方:无效格式与重复。

在我的代码中,我有

    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

如果电子邮件格式无效(例如“user@example”)e.message 为“验证失败:电子邮件无效”

如果电子邮件已存在于表中,则 e.message 为“验证失败:电子邮件已被占用”

我讨厌解析 e.message 文本以确定原因的想法......救援处理程序是否有更好的方法来检测引发 ActiveRecord::RecordInvalid 异常的根本原因?

附言我知道在这个例子中,我可以在保存之前简单地检查已经存在的电子邮件,但我试图了解检测和处理抛出相同异常的不同验证失败的一般解决方案。

最佳答案

执行此操作的标准 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

在您的用户创建 View 中:
<% if @user.errors.any? %>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>

关于ruby-on-rails - rails 3.1:应用程序如何为 ActiveRecord::RecordInvalid 处理不同的 'reasons'(例如,重复与验证错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9592256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com