Ruby on Rails - Могу ли я изменить значение атрибута до его вызова?
-
05-07-2019 - |
Вопрос
Допустим, у меня есть эта модель с именем Product с полем с именем brand . Предположим, что значения brand хранятся в формате this_is_a_brand . Могу ли я определить метод в модели (или где-либо еще), который позволяет мне изменять значение brand до его вызова. Например, если я позвоню @ product.brand , я хочу получить Это бренд вместо this_is_a_brand .
Решение
Я бы рекомендовал использовать синтаксис в квадратных скобках ( []
и [] =
) вместо 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. Но он будет возвращен как «это бренд».