Это невозможно, потому что взаимодействие с текстовыми полями всегда делается однопоточным и обрабатывается циклом сообщения / события, где всегда обрабатывается одно сообщение / событие за один раз.
Я рекомендовал бы использовать синтаксис квадратной скобки ([]
и []=
) вместо read_attribute
и write_attribute
. Синтаксис квадратной скобки короче и разработан для обертывания защищенных read/write_attribute методов.
def brand
original = self[:brand]
transform(original)
end
def brand=(b)
self[:brand] = reverse_transform(b)
end
Вместо того, чтобы получать доступ к @attributes непосредственно, необходимо использовать read_attribute
и write_attribute
:
def brand
b = read_attribute(:brand)
b && b.transform_in_some_way
end
def brand=(b)
b && b.transform_in_some_way
write_attribute(:brand, b)
end
В Вашей модели можно переопределить вызов метода brand
.
def brand
#code to modify the value that is stored in brand
return modified_brand
end
Это позволит этому быть сохраненным как this_is_a_brand. Но, это будет возвращено как, "это - бренд".