У меня есть модель с некоторыми атрибутами и виртуальным атрибутом. Этот виртуальный атрибут используется для создания флажка в форме создания.
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
'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
Но я чувствую себя грязным, делая это таким образом. Есть ли лучшая альтернатива без повторной записи метода преобразования?
Спасибо