我有一个使用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"
任何人都知道为什么?
答案 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。您可以从此方法保存数据。