关于* args的布尔值转换的弃用警告

时间:2015-02-16 08:58:07

标签: ruby-on-rails

在从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)

为什么我在设置布尔值时会收到此警告,如何解决此问题?

2 个答案:

答案 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,即设置为符号而不是有效的布尔值。因此,弃用警告允许我找到潜在的错误。