我遇到了与验证相关的问题。但是,验证错误仅出现在生产环境中,并且没有意义。
详细信息:在通过AJAX提交表单创建新的stop
实例后,由于在Stop #create action中@ stop.save失败,我得到了Stop#new。阻止停止保存的错误是由
Setup
(设置必须存在) - 停止belongs_to
设置,但是
没有验证规则检查是否存在父设置User ended
(用户结束必须存在) - 停止belongs_to
user_ended,但同样没有验证规则来强制执行user_ended状态我无法在开发环境中复制相同的错误,其中应用程序正在接受没有验证错误的新停止。
任何人都可以指出我可能的原因吗?我想在生产环境中考虑调试一些东西,对此也有任何建议。
答案 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