Ruby on rails RubyonRails——我可以在调用属性之前修改它的值吗?
假设我有一个名为Product的模型,它有一个名为brand的字段。假设品牌的价值以该品牌的格式存储。我可以在模型(或其他任何地方)中定义一种方法,允许我在调用品牌之前修改品牌价值。例如,如果我调用@product.brand,我想得到这是一个品牌,而不是这个品牌。在您的模型中,您可以覆盖方法调用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 这将允许将其存储
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