Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 关于*args的布尔转换的弃用警告_Ruby On Rails - Fatal编程技术网

Ruby on rails 关于*args的布尔转换的弃用警告

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

在从Rails 4.1.9升级到4.2.0的过程中,我收到了弃用警告
您试图为我的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)。”
结束
结束
结束
结束
模块连接适配器
类列
真值