Ruby on rails RubyonRails——我可以在调用属性之前修改它的值吗?

Ruby on rails RubyonRails——我可以在调用属性之前修改它的值吗?,ruby-on-rails,ruby,model,attributes,Ruby On Rails,Ruby,Model,Attributes,假设我有一个名为Product的模型,它有一个名为brand的字段。假设品牌的价值以该品牌的格式存储。我可以在模型(或其他任何地方)中定义一种方法,允许我在调用品牌之前修改品牌价值。例如,如果我调用@product.brand,我想得到这是一个品牌,而不是这个品牌。在您的模型中,您可以覆盖方法调用brand def brand #code to modify the value that is stored in brand return modified_brand end 这将允许将其存储

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

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

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

这将允许将其存储为该品牌。但是,它将作为“这是一个品牌”返回。

而不是直接访问@attributes,您应该使用
read\u attribute
write\u 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

我建议使用方括号语法(
[]
[]=
)而不是
读取属性和
写入属性。方括号语法较短且简单


由于最后一个答案是7年前发布的,我将提供当前的建议

def brand
  super.humanize
end

将“这是一个品牌”改为“这是一个品牌”

好的,我知道了。属性存储在@Attributes中,因此我可以在方法内部调用@Attributes['brand']。谢谢你的帮助。成语b&&b.transform在某种程度上是什么意思?为什么使用这些方法更好?对于另一个不懂的人:b&&b。。。。是一个常见的Ruby习语。只有当b不是nil时,才会执行&&之后的内容。另请参见AND和gem以了解相同的功能:b.AND和.transform
def brand
  super.humanize
end