Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3:DataObjects::SQLError——如何阻止它们在*warnings*上产生错误?_Ruby On Rails_Ruby_Datamapper_Legacy Database - Fatal编程技术网

Ruby on rails Rails 3:DataObjects::SQLError——如何阻止它们在*warnings*上产生错误?

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停止并回滚插件的原因。我知道我可以修复这个字段

当我(通过DataMapper)向遗留数据库模式中的表插入几个字段时,我得到以下结果:

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