質問

brand という名前のフィールドを持つ Product という名前のこのモデルがあるとします。 brand の値が this_is_a_brand の形式で保存されているとします。モデル(または他の場所)で、 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

最後の回答が7年前に投稿されたので、 Rails APIに貢献します。 は現在提案しています。

def brand
  super.humanize
end

ヒューマナイズは、「this_is_a_brand」を「This」に変更しますブランドです

モデルでは、メソッド呼び出し brand をオーバーライドできます。

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

これにより、this_is_a_brandとして保存できます。ただし、「これはブランドです」として返されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top