验证错误仅在生产环境中添加

时间:2017-10-18 20:56:54

标签: ruby-on-rails validation

我遇到了与验证相关的问题。但是,验证错误仅出现在生产环境中,并且没有意义。

详细信息:在通过AJAX提交表单创建新的stop实例后,由于在Stop #create action中@ stop.save失败,我得到了Stop#new。阻止停止保存的错误是由

引起的
  1. 缺少Setup(设置必须存在) - 停止belongs_to设置,但是 没有验证规则检查是否存在父设置
  2. 缺少User ended(用户结束必须存在) - 停止belongs_to user_ended,但同样没有验证规则来强制执行user_ended状态
  3. 我无法在开发环境中复制相同的错误,其中应用程序正在接受没有验证错误的新停止。

    任何人都可以指出我可能的原因吗?我想在生产环境中考虑调试一些东西,对此也有任何建议。

3 个答案:

答案 0 :(得分:2)

好吧,也许您正在使用Rails 5,如果是这种情况,默认情况下需要所有belongs_to关联。要选择退出,您应该声明如下:

belongs_to :setup, optional: true
belongs_to :user_ended, optional: true

答案 1 :(得分:1)

我从Rails 4.2到Rails 5.1.4进行了增量升级,并且此问题的开发环境默认情况下没有在belongs_to_required_by_default关联中获取需求(尽管生产环境确实如此)。查看初始化程序文件,我意识到我没有通过belongs_to并根据文件中的建议翻转新的默认值。此文件中的<html data-useragent="Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)"> 标志设置为false。将此标志翻转为true(或完全删除文件,因为它不再需要)解决了这个问题,我的开发环境现在需要html[data-useragent*='MSIE 10.0'] body .my-class{ margin-left: -0.4em; } 关联。但是,我还不清楚为什么生产环境不尊重设置为false的标志。

答案 2 :(得分:0)

我搜索了发行说明并发现了在rails 5.0中

  

belongs_to现在默认会触发验证错误   协会不存在。您可以在每个关联上关闭此功能   以optional: true为基础。同时弃用required选项以支持   belongs_to可选。

此外,更新到版本5.0的rails的rake任务正在添加以下选项

  

#默认情况下需要belongs_to个关联。以前的版本有误。   Rails.application.config.active_record.belongs_to_required_by_default = false

但是,rails 5.1停止使用此选项而没有任何警告,Rails团队决定只在belongs_to $sudo lshw -C network *-network description: Wireless interface product: Wireless 3160 vendor: Intel Corporation physical id: 0 bus info: pci@0000:03:00.0 logical name: wlp3s0 version: 83 serial: d0:7e:35:bc:a6:ab width: 64 bits clock: 33MHz capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless configuration: broadcast=yes driver=iwlwifi driverversion=4.10.0-37-generic firmware=17.459231.0 latency=0 link=no multicast=yes wireless=IEEE 关联中记录此更改应该就足够了。 docs

中的更多内容