在从Rails 4.1.9升级到4.2.0时,我收到了spec_helper文件中的以下代码的弃用警告spec_helper:
def Factory(*args)
FactoryGirl.create *args
end
当我打电话给我的一个工厂时,通常会出现这样的警告:
Factory(:invitation)
当我没有设置布尔值时,为什么要得到这个警告,以及如何修复这个问题?
发布于 2015-02-19 21:40:24
虽然我没有使用这个调用显式地设置布尔值,但我隐含地设置了一个布尔值。引用
Factory(:invitation)
调用factories.rb
文件中的工厂定义。邀请工厂的定义确实设置了一个邀请的布尔字段。此外,我有一个错误,并将布尔字段设置为:false而不是false,即设置为符号而不是有效的布尔值。因此,弃用警告允许我找到一个潜在的bug。
发布于 2015-02-23 03:58:10
在Rails 4.2中,引入了一种新的(更好的)类型铸造实现:
http://technology.customink.com/blog/2015/01/06/activerecord-42s-type-casting/
这现在警告为布尔值设置的不正确类型。
在我们的例子中,在迁移到Rails 4.2时,这不再给我们一个我们用ActiveRecord::ConnectionAdapters::Column.value_to_boolean
编程的异常
我实现的解决方案是在config/initializers目录中添加这个active_record_monkey_patch.rb
:
module ActiveRecord
module Type
class Boolean < Value
private
def cast_value(value)
if value == ''
nil
elsif ConnectionAdapters::Column::TRUE_VALUES.include?(value)
true
elsif ConnectionAdapters::Column::FALSE_VALUES.include?(value)
false
else
raise InputDataError, 'Invalid boolean (use false or true for boolean).'
end
end
end
end
module ConnectionAdapters
class Column
TRUE_VALUES << 'j' << 'J' << 'True' << 'y' <<'Y'
FALSE_VALUES << 'n' << 'N' << 'False'
end
end
end
https://stackoverflow.com/questions/28537705
复制相似问题