Ruby on rails 关于*args的布尔转换的弃用警告
在从Rails 4.1.9升级到4.2.0的过程中,我收到了弃用警告Ruby on rails 关于*args的布尔转换的弃用警告,ruby-on-rails,Ruby On Rails,在从Rails 4.1.9升级到4.2.0的过程中,我收到了弃用警告您试图为我的spec\u helper文件中的以下代码指定一个不显式为'true'或'false'的值…: def Factory(*args) FactoryGirl.create *args end 当我呼叫我的一家工厂时,通常会出现警告: Factory(:invitation) 当我没有设置布尔值时,为什么会收到此警告?如何解决此问题?虽然我没有通过此调用显式设置布尔值,但却隐式设置了布尔值。调用 Fact
您试图为我的spec\u helper文件中的以下代码指定一个不显式为'true'或'false'的值…
:
def Factory(*args)
FactoryGirl.create *args
end
当我呼叫我的一家工厂时,通常会出现警告:
Factory(:invitation)
当我没有设置布尔值时,为什么会收到此警告?如何解决此问题?虽然我没有通过此调用显式设置布尔值,但却隐式设置了布尔值。调用
Factory(:invitation)
调用factories.rb
文件中的工厂定义。邀请工厂的定义没有设置邀请的布尔字段。此外,我还发现了一个输入错误,并将布尔字段设置为:false而不是false,即设置为符号而不是有效的布尔值。因此,弃用警告允许我找到一个潜在的bug。在Rails 4.2中,引入了一个新的(更好的)类型转换实现:
现在,这会警告为布尔值设置的类型不正确
在我们的例子中,在迁移到Rails 4.2时,这停止给我们一个异常,我们在ActiveRecord::ConnectionAdapters::Column.value\u to\u boolean
我实现的解决方案是在config/initializers目录中添加这个active\u record\u monkey\u 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
模块活动记录
模块类型
类布尔<值
私有的
def cast_值(值)
如果值=“”
无
elsif连接适配器::列::真值。包括?(值)
真的
elsif连接适配器::列::FALSE_值。包括?(值)
假的
其他的
引发InputDataError,“无效的布尔值(布尔值使用false或true)。”
结束
结束
结束
结束
模块连接适配器
类列
真值