Ruby on Rails - 我可以在调用之前修改属性的值吗?

时间:2008-10-08 07:23:03

标签: ruby-on-rails ruby model attributes

假设我有一个名为 Product 的模型,其中包含一个名为 brand 的字段。假设品牌的值以 this_is_a_brand 格式存储。我可以在模型中(或其他任何地方)定义一个方法,允许我在调用之前修改品牌的值。例如,如果我打电话给 @ product.brand ,我想要这是一个品牌,而不是 this_is_a_brand

4 个答案:

答案 0 :(得分:9)

我建议使用方括号语法([][]=)而不是read_attributewrite_attribute。方括号语法较短且designed to wrap the protected read/write_attribute methods

def brand
  original = self[:brand]
  transform(original)
end

def brand=(b)
  self[:brand] = reverse_transform(b)
end

答案 1 :(得分:7)

不应直接访问@attributes,而应使用read_attributewrite_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

答案 2 :(得分:1)

最后一个答案是在7年前发布的,我将贡献Rails API目前建议的内容。

def brand
  super.humanize
end

Humanize变成了'this_is_a_brand'到这是一个品牌'

答案 3 :(得分:0)

在您的模型中,您可以覆盖方法调用brand

def brand
#code to modify the value that is stored in brand
return modified_brand
end

这将允许它存储为this_is_a_brand。但是,它将被归还为“这是一个品牌”。