gpt4 book ai didi

ruby-on-rails - 处理 Controller 中的唯一记录异常

转载 作者:行者123 更新时间:2023-12-04 01:17:11 33 4
gpt4 key购买 nike

我有一个名为 Subscription 的模型,它在字段 [:email, :location] 上有一个唯一索引。这意味着每个位置可以订阅一个电子邮件地址。

在我的模型中:

class Subscription < ActiveRecord::Base
validates :email, :presence => true, :uniqueness => true, :email_format => true, :uniqueness => {:scope => :location}
end

在我的创建方法中。我想处理异常 ActiveRecord::RecordNotUnique与常规错误不同。我如何将它添加到这个通用的 create 方法中?
  def create
@subscription = Subscription.new(params[:subscription])
respond_to do |format|
if @subscription.save
format.html { redirect_to(root_url, :notice => 'Subscription was successfully created.') }
else
format.html { render :action => 'new' }
end
end
end

最佳答案

我不认为有一种方法可以为单一类型的验证失败抛出异常。要么你可以做一个 save!这将引发所有保存错误(包括所有验证错误)的异常,并分别处理它们。

你能做的就是处理异常 ActiveRecord::RecordInvalid并将异常消息与 Validation failed: Email has already been taken 匹配然后单独处理。但这也意味着您还必须处理其他错误。

就像是,

begin
@subscription.save!
rescue ActiveRecord::RecordInvalid => e
if e.message == 'Validation failed: Email has already been taken'
# Do your thing....
else
format.html { render :action => 'new' }
end
end
format.html { redirect_to(root_url, :notice => 'Subscription was successfully created.') }

我不确定这是否是唯一的解决方案。

关于ruby-on-rails - 处理 Controller 中的唯一记录异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982371/

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