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

ske*_*ker 5 ruby attributes model ruby-on-rails

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

two*_*ool 10

我建议使用方括号语法([][]=)而不是read_attributewrite_attribute.方括号语法较短,旨在包装受保护的 read/write_attribute方法.

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

def brand=(b)
  self[:brand] = reverse_transform(b)
end
Run Code Online (Sandbox Code Playgroud)


tom*_*fro 7

您应该使用read_attributewrite_attribute:而不是直接访问@attributes .

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
Run Code Online (Sandbox Code Playgroud)