控制器如何手动设置某个字段的验证错误

2024-02-08

我有一个包含 3 个 ActiveRecord 字段的表单。其中一个字段有一种愚蠢的、依赖于国家的验证要求。 (例如,如果在设置向导表单上创建对象,我仅验证该字段。)

在我的 POST 处理程序中创建对象时,我想我可以调用errors.add 来插入一个特殊的错误条件

@foo = Foo.new(params[:foo])
if goofy_conditions(params[:foo][:goofy_field])
  @foo.errors.add(:goofy_field, "doesn't meet the goofy conditions" )
end
respond_to do |format|
  if @foo.save
    ...
  else
    ... redirect back to form (with error fields hilited)

然而,在控制器中执行 @foo.errors.add() 似乎没有做任何事情......如果其他字段通过验证,它不会阻止 save() 。

另一种方法是将自定义验证处理程序放入模型中...我知道使用 error.add(:field, 'msg') 在那里工作得很好...但在这种情况下,我的控制器如何将信息“传递”到验证器告诉它该字段是否需要验证。


这就是模型逻辑。看着自定义验证 http://guides.rubyonrails.org/active_record_validations.html#performing-custom-validations

class GoofyThing < ActiveRecord::Base
  validate :goofy_attribute_is_goofy

  def goofy_attribute_is_goofy
    if goofy_conditions(self.goofy_field)
      self.errors.add(:goofy_field, "doesn't meet the goofy conditions" )
    end
  end
end

然后它的行为就像任何其他验证一样。

Edit

您可以有条件地验证:if option:

attr_accessible :via_wizard
validate :goofy_attribute_is_goofy, :if => lambda { self.via_wizard }

在你的控制器中:

class WizardController < ApplicationController
  before_filter :get_object, :set_wizard

  #...

  def get_object
    @object = GoofyThing.find(params[:id])
  end

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

控制器如何手动设置某个字段的验证错误 的相关文章

  • Twitter Bootstrap 中下拉链接的模态

    我正在尝试从下拉菜单中的链接进行模式启动 该模式似乎已启动 网站变为灰色 但看不到 来自不在下拉列表中的常规链接的模态工作得很好 我对 jquery 进行了愚弄 但由于我是 jquery 的新手 所以没有任何结果 这是我的网站代码
  • 带有附加参数的redirect_to

    我是一个菜鸟 redirect to users url notice Succeed p p 然后我添加一个message它失败了 redirect to users url notice Succeed message test p p
  • 多语言标记验证器

    是否有免费的在线多语言标记验证服务可以正确识别和验证多语言标记 我确实找到了totalvalidator和htmlvalidator 但这些是 付费 非基于网络的解决方案 Use http validator w3 org nu http
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • 回形针不支持 .doc 文件

    在 Rails 4 0 2 中 我使用回形针 gem 上传文件 但它不支持 doc 文件 在文件上传字段下方 显示一条错误消息 扩展名与其内容不匹配 在模型中 检查内容类型的验证如下 validates attachment content
  • 自定义通用 Rails 错误消息

    我们的 Rails 应用程序被设计为链接到多个客户端数据库的单个代码库 根据子域 应用程序确定要连接到哪个数据库 我们使用液体模板为每个客户定制演示文稿 我们无法为每个客户定制通用的 我们很抱歉 出了点问题 消息 谁能推荐一种方法让我们能够
  • 有时您可能需要重新启动 Webrick 才能看到所做的更改,这是否正确?

    我听 Kevin Skoglund lynda com 说 养成在开发过程中频繁重新启动 Webrick 的习惯是一个很好的习惯 虽然通常您不需要重新启动 Webrick 来查看更改 但他暗示在某些特殊情况下可能需要这样做 有谁知道这些情况
  • 禁用 notInArray 验证器 Zend Framework 2

    有没有办法在 Zend Framework 2 中禁用 notInArray Validator 互联网上的所有信息都显示如何在 Zend Framework 1 中禁用 notInArray Validator 例如以这种方式 如果您根本
  • 在 ActiveAdmin 或打印解决方案中动态更改分页

    我是 Activeadmin 和 Rails 的新手 我需要一些帮助 我有一个分页模型 我想允许用户更改分页值或完全禁用它 这样它就可以打印 到打印机 所有记录 或过滤后的记录 我知道我可以在 before filter 中使用 per p
  • Capybara-webkit 无法处理与 bootstrap glyphicon 的链接

    我有一个链接 link to q span class glyphicon glyphicon trash span html safe feed item data confirm Are you sure toggle tooltip
  • 多次部署后 Heroku Slug 大小

    我有一个红宝石 on Rails非常接近 slug 大小限制 300mb 的应用程序 我已经尽可能地减小了尺寸 slugignore但还没有得到我想要的结果 一时兴起 我尝试创建一个新的Heroku应用程序并向其部署相同的 git 存储库
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • 确定 C 字符串是否是 C 中的有效 int

    我需要检查 C 字符串是否是有效整数 我都尝试过 int num atoi str and int res sscanf str d num 但发送字符串 8 9 10 这两行都仅返回 8 而没有指示该字符串的无效性 谁能提出替代方案 看看
  • 创建一个默认为零的工厂关联?

    在factories rb 文件中使用FactoryGirl gem 如何创建一个关联默认为nil 的工厂 我正在思考以下几点 Factory define user do factory factory association post
  • 使用 Passenger + Apache 相对于 Webrick 的优势

    我想说服我的管理层 使用 Apache 乘客设置是继续生产的方法 而不是使用 webrick 或 mongrel 我从网上找到了一些观点 如果您能添加您的想法 那将非常有帮助 因为这将有力地帮助我表达我的观点 欢迎提供技术细节 如果您有任何
  • 将 Rack::Deflater 插入机架中的哪个位置?

    我目前有以下内容 use Rack Rewrite use Rack Cache verbose gt true metastore gt memcached localhost 11211 rack cache meta entityst
  • 再次返回使用 Rails 3 中的 Rails 2.3.5

    最近 我看到有关Rails 3 0 beta的信息 我想尝试一下 所以我使用gem update并安装了这个版本 但现在 我需要回到 Rails 2 3 5 我怎样才能做到呢 我正在考虑这两个解决方案 卸载 Rails 3 我读到有人使用
  • 在表单中编辑序列化哈希?

    我正在序列化存储在settings表中的字段 并且希望能够在表单字段中编辑该哈希 class Template lt ActiveRecord Base serialize settings end 但我就是这么做那么文本区域只显示序列化数
  • 如何使用 Rails 4 和 Ruby 2.0 应用程序进行实时重新加载?

    如果我在 Rails 4 Ruby 2 0 项目的文本编辑器中编辑 scss 或 erb 文件 我希望在浏览器中看到实时更改 我尝试了 Guard 和 Guard live reload 但它抛出以下错误 22 58 04 ERROR Co
  • 默认:Rails 资源路由的排除选项

    一个小问题 我正在将 Rails 用于 REST API 但由于它是 RESTful API 所以我并不真正需要 new or edit我的任何资源的路由 因为人们只会完全通过自动 JSON 请求而不是图形方式与此 API 交互 例如 不需

随机推荐

  • React-router:通过路由传递数据

    我正在尝试找出通过路线传递数据的最佳方式 我知道我可以使用参数 但某些类型的数据不属于参数 例如 我有一个显示应用程序列表的索引页 每个应用程序旁边都有一个按钮 可将您引导至该应用程序的视图 我想将应用程序本身传递给应用程序处理程序 然而
  • 方法引用如何与具有不同实现函数名称的函数接口兼容?

    这里 对静态方法 isPrime 的引用作为第一个参数传递给 numTest 这是可行的 因为 isPrime 与 IntPredicate 函数接口兼容 因此 表达式 MyIntPredicates isPrime 计算为对对象的引用 其
  • Oracle WITH CLAUSE 不起作用?

    我尝试在查询中使用WITH子句 但不断收到消息 ORA 00942 表或视图不存在 我尝试创建一个简单的查询作为示例 WITH测试AS 从客户中选择 COUNT Customer ID 从测试中选择 但即使这样也不起作用 它只是给出了这样的
  • Spring / Glassfish 3.1.2 过时文件

    我目前正在使用 Spring Web MVC 和 Spring Security 开发一个应用程序 我可以在 Glassfish 3 1 2 上部署它 但是当我想在修复一些错误后重新部署时 我收到此错误 WARNING Exception
  • 如何将用户重定向到 Android 应用程序中的默认启动器?

    自从我尝试弄清楚如何开发一个使用 NFC 身份验证的 Android 解锁屏幕应用程序以来 已经有很长一段时间了 我正在使用 Nexus S 经过在互联网上的多次研究 我得出的结论是 目前不支持将锁屏替换为第三方应用程序 我们需要修改平台才
  • 调用存储过程时,如何在表值参数中包含 RowVerson 列?

    如果我有一个包含 RowVersion 列的 SQLDataRecord 如下面的代码所示 我总是收到 SQL Server 错误 8052 传入的表格数据流 TDS 远程过程调用 RPC 协议流不正确 表值参数 d ls 行 I64d 列
  • 为什么转换函数不能与 std::string 一起使用?

    考虑以下类 其中包含 std string 类型的转换函数 class SomeType public SomeType char value str value operator std string return std string
  • jQuery 循环遍历每个 div

    我很确定这对于 jQuery 高手来说将是一个非常简单的答案 而且我也很确定它涉及某种循环 我试图对两个单独的 div 执行基本相同的计算 但根据找到的图像数量为每个 id 分配不同的 CSS 宽度值 我正在执行的计算实际上与我的问题无关
  • Microsoft Edge浏览器如何读取剪贴板数据

    我无法在 Microsoft Edge 浏览器中读取剪贴板数据 我正在使用下面的 JavaScript if window clipboardData window clipboardData getData IE pastedText w
  • 将类型变量替换为 const 成员

    假设我有一个包含一些常量成员的类 class MyClass public MyClass int a a a MyClass MyClass 0 MyClass const int a 现在我想存储一个实例MyClass某处 例如作为全局
  • 了解 CSS 选择器优先级/特异性

    我想了解 CSS 选择器如何处理属性冲突 如何选择一种财产而不是另一种财产 div background color red div my class background color black div my id background
  • 在Eclipse中一步步调试java程序

    我想逐行调试java程序的整个流程 我正在使用eclipse 我怎样才能做到这一点 在 Eclipse 中调试 Java 程序需要多个步骤 例如 设置断点 启动调试器 控制程序的执行 对于逐行使用 F6 和 F5 进入方法 评估变量等 把所
  • 如何让 ES6 生成器等待 Promise,就像在 redux-saga 中一样?

    我读过 生成器不会等待承诺 为什么发电机的情况并非如此 redux saga 以及如何让我自己的发电机等待 例如 这个传奇 takeLatest FETCH USER REQUESTED function const fetchPromis
  • 如何使用反应式表单包装像自动完成这样的 primeng 组件?

    我想将 primeng 自动完成组件包装在我自己的组件中 但无法弄清楚如何提供 formControlName 错误 未捕获 承诺中 错误 formControlName 必须与父 formGroup 指令一起使用 包装组件 html
  • 防止 OS X Chrome 和 Safari 上的弹性滚动

    我正在寻找一种方法来防止 Chrome 和 Safari 中 OS X 上发生的弹性滚动 如果你不明白我的意思 那就是当页面位于顶部时向上滚动 或当页面位于底部时向下滚动 并且页面后面会显示灰色背景 对于单页应用程序有一个 css 解决方案
  • connect-mongo 每秒创建新会话

    我的 Nodejs 应用程序托管在 Openshift 上 这是我的规格 节点 v0 10 35 express v3 4 8 我的 package json 依赖项 dependencies angular loading bar 0 9
  • 画布缩放通过 CSS 还是 JS 性能更高?

    以下文档提到了 HTML5 Canvas 性能缩放的一些准则 https developer mozilla org en US docs Web API Canvas API Tutorial Optimizing canvas Scal
  • 去掉小数点后的 0 值

    我想问是否有人知道删除十进制 0 值的查询 例如 字段名称百分比具有这些值 Percent 770 00000000000000000000 340 670000000000000000000 96 00000000000000000000
  • 如何使用 @angular/http 返回字符串而不是 Observable

    我正在将 Angular 4 与 net core WEB API 挂钩 Web API 根据传入的 ID 以字符串形式返回 CustomerName 这是 Angular 4 中的服务方法 我知道 Angular http 必须返回一个
  • 控制器如何手动设置某个字段的验证错误

    我有一个包含 3 个 ActiveRecord 字段的表单 其中一个字段有一种愚蠢的 依赖于国家的验证要求 例如 如果在设置向导表单上创建对象 我仅验证该字段 在我的 POST 处理程序中创建对象时 我想我可以调用errors add 来插