在从Rails 4.1.9升级到4.2.0时,我收到了spec_helper文件中以下代码的弃用警告You attempted to assign a value which is not explicitly `true` or `false` to a boolean column...
:
def Factory(*args)
FactoryGirl.create *args
end
当我打电话给我的一家工厂时,通常会发出警告:
Factory(:invitation)
为什么我在设置布尔值时会收到此警告,如何解决此问题?
答案 0 :(得分:1)
在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
答案 1 :(得分:0)
虽然我没有使用此调用显式设置布尔值,但我隐式设置了一个。
的调用Factory(:invitation)
调用factories.rb
文件中的工厂定义。 Invitation工厂的定义确实设置了一个布尔字段的邀请。此外,事实证明我有一个拼写错误,并将布尔字段设置为:false而不是false,即设置为符号而不是有效的布尔值。因此,弃用警告允许我找到潜在的错误。