Ruby on rails Rails 3:DataObjects::SQLError——如何阻止它们在*warnings*上产生错误?
当我(通过DataMapper)向遗留数据库模式中的表插入几个字段时,我得到以下结果:Ruby on rails Rails 3:DataObjects::SQLError——如何阻止它们在*warnings*上产生错误?,ruby-on-rails,ruby,datamapper,legacy-database,Ruby On Rails,Ruby,Datamapper,Legacy Database,当我(通过DataMapper)向遗留数据库模式中的表插入几个字段时,我得到以下结果: DataObjects::SQLError "Field 'activationcode' doesn't have a default value" 我实际上没有为该字段指定一个值,但是底层的DB模式(MySQL)也没有一个设置。这实际上并没有引起问题,它只是意味着MySQL执行插入,但在插入完成后显示“Warnings:1”。然而,这一警告正是导致Rails停止并回滚插件的原因。我知道我可以修复这个字段
DataObjects::SQLError "Field 'activationcode' doesn't have a default value"
我实际上没有为该字段指定一个值,但是底层的DB模式(MySQL)也没有一个设置。这实际上并没有引起问题,它只是意味着MySQL执行插入,但在插入完成后显示“Warnings:1”。然而,这一警告正是导致Rails停止并回滚插件的原因。我知道我可以修复这个字段,但还有数千个类似的字段,我想知道是否有办法让DataObjects冷静下来,只在实际的SQL错误上出错,而不是警告上出错
Rails 3.0.7,Ruby 1.9.2,DataMapper 1.1.0为不可避免的可怜灵魂,也必须解决这个问题 问题是JDBC(DataObjects包装的东西)调整MySQL变量
sql\u mode
,并将其设置为TRADITIONAL
,这将这种行为添加到MySQL中。在使用DataMapper之前,只需在应用程序中的任何位置撤消该操作(只需执行一次)
由于sql\u模式
可以是一个逗号分隔的模式列表,理想情况下,您可能希望做一些更聪明的事情,从列表中删除传统的
,但上面的解决方案既快又脏
更新:这不仅仅是传统的标志造成的。这是传统的、严格的所有表和严格的转换表。我检查了JDBC的配置,并通过反复试验消除了有问题的模式。不产生警告=错误行为的结果列表为:
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_UNSIGNED_SUBTRACTION,NO_DIR_IN_CREATE,ANSI,NO_BACKSLASH_ESCAPES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
对于不可避免的可怜的灵魂,他也必须围绕这个问题工作 问题是JDBC(DataObjects包装的东西)调整MySQL变量
sql\u mode
,并将其设置为TRADITIONAL
,这将这种行为添加到MySQL中。在使用DataMapper之前,只需在应用程序中的任何位置撤消该操作(只需执行一次)
由于sql\u模式
可以是一个逗号分隔的模式列表,理想情况下,您可能希望做一些更聪明的事情,从列表中删除传统的
,但上面的解决方案既快又脏
更新:这不仅仅是传统的标志造成的。这是传统的、严格的所有表和严格的转换表。我检查了JDBC的配置,并通过反复试验消除了有问题的模式。不产生警告=错误行为的结果列表为:
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_UNSIGNED_SUBTRACTION,NO_DIR_IN_CREATE,ANSI,NO_BACKSLASH_ESCAPES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION