我有一个带有一些属性和一个虚拟属性的模型。此虚拟属性用于在创建表单中制作复选框。
class Thing < ActiveRecord::Base
attr_accessor :foo
attr_accessible :foo
end
由于该字段是表单中的复选框,因此该foo
属性将接收'0'
或'1'
作为值。由于以下代码,我希望它是一个布尔值:
class Thing < ActiveRecord::Base
attr_accessor :foo
attr_accessible :foo
before_validation :set_default_bar
private
def set_default_bar
self.bar = 'Hello' if foo
end
end
这里的问题是即使在foo
is时条件也会为真'0'
。我想使用 ActiveRecord 类型转换机制,但我发现这样做的唯一方法如下:
class Thing < ActiveRecord::Base
attr_reader :foo
attr_accessible :foo
before_validation :set_default_bar
def foo=(value)
@foo = ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value)
end
private
def set_default_bar
self.bar = 'Hello' if foo
end
end
但我觉得那样做很脏。有没有更好的选择而不重写转换方法?
谢谢