Ruby:活动记录:布尔接受值,为什么' y'和'是'不能?

时间:2014-04-16 04:09:56

标签: ruby-on-rails ruby activerecord

我有一个使用rails 4.1的rails模型,其中一个字段是布尔类型。我想使用'y'或'yes'更改布尔值,但它不起作用。它只允许't','on',true。 我的数据库是postrgresql

2.1.1 :031 > a.default_indicator = 'y'
 => "y"
2.1.1 :032 > a.default_indicator
 => false
2.1.1 :033 > a.default_indicator = 'yes'
 => "yes"
2.1.1 :034 > a.default_indicator
 => false
2.1.1 :035 > a.default_indicator = 'true'
 => "true"

任何人都知道为什么?

2 个答案:

答案 0 :(得分:5)

当Rails需要将数据库字段中的值转换为模型属性时,您会在ActiveRecord::ConnectionAdapters::Column中找到一些常量:

TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON'].to_set
FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF'].to_set

# convert something to a boolean
def value_to_boolean(value)
  if value.is_a?(String) && value.blank?
    nil
  else
    TRUE_VALUES.include?(value)
  end
end

答案 1 :(得分:0)

您可以在模型中查看此方法&相应地保存它。

对于例如。

class MyEntity < ActiveRecord::Base
  def active
     return false unless active=='y'|| active == 'yes'
     true
  end
end

上述方法将返回True或false。您可以从此方法保存数据。