いくつかの属性と仮想属性を持つモデルがあります。この仮想属性は、作成フォームにチェックボックスを作成するために使用されます。
class Thing < ActiveRecord::Base
attr_accessor :foo
attr_accessible :foo
end
フィールドはフォームのチェックボックスであるため、属性はorを値として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
ここでの問題は、 is の場合でも条件が true になることfoo
です'0'
。ActiveRecord 型のキャスト メカニズムを使用したいのですが、それができることがわかったのは次の 1 つだけです。
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
でも、そんなことをすると汚い気がする。変換方法を書き直さずに、より良い代替手段はありますか?
ありがとう