Ruby on Rails - 我可以在调用之前修改属性的值吗?
-
05-07-2019 - |
题
假设我有一个名为 Product 的模型,其中包含一个名为 brand 的字段。假设品牌的值以 this_is_a_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。但是,它将被返回为“这是一个品牌”。
不隶属于 StackOverflow