处理控制器中的唯一记录异常

2023-11-25

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

在我的模型中:

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

在我的创建方法中。我想处理异常ActiveRecord::RecordNotUnique与常规错误不同。我如何将其添加到这个通用创建方法中?

  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.') }

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理控制器中的唯一记录异常 的相关文章

随机推荐

  • 自动释放与释放

    当我需要一个数组临时使用时 这些有什么区别 1 NSMutableArray stuff NSMutableArray alloc init use the array stuff release 2 NSMutableArray stuf
  • 在 WooCommerce 购物车中获取购物车项目的产品 ID

    cart item woocommerce gt cart gt get cart 我有上面的代码 如果我在 cart item 上运行 print r 我会得到一个多维数组 Array a6292668b36ef412fa3c4102d1
  • Web应用中长时间运行查询问题的解决方案(异步请求)

    这是问题所在 企业 Web 应用程序的用户正在执行导致长 非常长 数据库查询 或其他长处理密集型任务 的任务 问题 请求超时 一段时间后用户可能会遇到请求超时 会话超时 如果未使用会话保持方法 则可能会发生会话超时 Request thre
  • Jest + Material-UI:正确模拟 useMediaQuery

    我正在使用 Material UIuseMediaQuery 我的组件之一中的函数来确定size用于 a 的道具
  • Angular 2 路由参数重新初始化组件 onInit

    我遇到一个问题 当我使用新参数路由到我的组件时 它正在重新初始化 这是我的路线 const appRoutes Routes path component MyNewComponentComponent path tiles compone
  • 关于多个“catch”的问题

    谁能告诉我为什么这个类的输出是 xa 为什么其他异常 RuntimeException和Exception 不会被捕获 public class Tree public static void main String args try th
  • WPF TabItem 内容对齐始终居中

    我试图将一些内容放入 TabItem 中 但无法添加填充 TabItem 空间的容器 我添加的任何内容都会居中显示 我正在使用 WPF Toolkit 中的主题 WhistlerBlue xaml 所以我认为这可能就是导致我出现这个问题的原
  • 为什么从 PHP 5.4 开始永久启用“echo”短标签?

    甚至官方文档曾经告诉我们PHP 短标签 是 坏 然而 从 PHP 5 4 开始 echo种类永久启用 无论short open tag setting 发生了什么变化 即使他们之前仅仅因为是否存在不可预测的性质而被劝阻short open
  • 如何在python(windows平台)中安装xgboost包?

    http xgboost readthedocs org en latest python python intro html 在xgboost的主页 上面的链接 上 写着 要安装 XGBoost 请执行以下步骤 你需要跑make在项目的根
  • 使用 FindMatchingFiles 工作流活动的 MatchPattern 属性

    我正在使用 TFS 2010 Team Build 自定义构建过程模板的默认工作流程 有一个活动叫FindMatchingFiles允许使用中定义的模式搜索特定文件MatchPattern财产 如果我只指定一个文件扩展名 它就会起作用 例子
  • OpenGraph 还是 Schema.org? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 只是想知道你们是否喜欢遵循以下标记的 OpenGraph 协议 或者 Schema org 协议 div span Kenmore White 17 Mi span div
  • 无法在 Ubuntu 13.04 上使用 RVM 安装 Ruby on Rails

    我正在尝试在我的 Ubuntu 机器上安装 RVM 我已经使用curl来获取RVM 但是一些RVM命令 安装 要求 抛出此apt get错误 There has been error while updating apt get pleas
  • Git-2-SVN 迁移?

    是的 我知道 为什么要从 Git 迁移到 SVN 好吧 我碰巧遇到这样的情况 我需要将一个巨大的 Git 存储库迁移到 Subversion 这是我根据埃德温的评论尝试的一个工作流程 首先创建一个本地SVN仓库 svnadmin creat
  • 通过推送通知启动应用程序时进行调试

    我目前正在开发一个接收推送通知的应用程序 我通过 PHP 页面使这一切 100 正常工作 我的应用程序可以接收多种不同类型的推送通知 PHP 处理这个问题并向我的应用程序发送不同的信息包 这些信息包都被很好地接收 但是 当用户 查看 通知并
  • 在类的构造函数中返回一个值

    到目前为止我有一个PHP带有构造函数的类 public function construct identifier NULL Return me if identifier NULL this gt emailAddress identif
  • 在 C++ 中寻找基于 Windows RAM 的共享内存解决方案

    我面临着一种情况 我需要将多达数百兆字节的内存从一个进程传递到另一个进程 现在我正在通过文件来完成它 但速度太慢了 我想为了更快 这些文件应该直接写入 RAM 并且可以从另一个进程访问 不需要花哨的同步 一个进程将创建共享内存对象并用数据填
  • 内容出现在固定标题后面

    我修复了网站的标题部分 但页面的第一个 div 出现在标题后面 而不是从标题的末尾开始 当您申请时position fixed or position absolute该元素将从文档流中删除 因此后面的元素将其视为不存在 这就是为什么你的d
  • 实体框架 nvarchar 外键区分大小写

    我有相当简单的表结构 如下所示 问题对我来说听起来很奇怪 虽然我选择解决这个问题 但想听取专家的意见 我有两张桌子 Users UserName nvarchar 250 Primary Key FirstName nvarchar 50
  • 为什么 Angular 5 中出现错误:没有导出成员“OpaqueToken”。?

    我有一个 Angular 4 应用程序 我正在将其升级到 Angular 5 我收到以下错误 src app application services generated variables ts 1 10 中出现错误 错误 TS2305
  • 处理控制器中的唯一记录异常

    我有一个名为 Subscription 的模型 它在字段 email location 上有唯一的索引 这意味着每个位置都可以通过一个电子邮件地址进行订阅 在我的模型中 class Subscription lt ActiveRecord