Ruby on Rails - Могу ли я изменить значение атрибута до его вызова? - PullRequest
5 голосов
/ 08 октября 2008

Допустим, у меня есть эта модель с именем Product с полем с именем brand . Предположим, что значения brand хранятся в формате this_is_a_brand . Могу ли я определить метод в модели (или где-либо еще), который позволит мне изменить значение brand до его вызова. Например, если я позвоню @product.brand, я хочу получить Это бренд вместо this_is_a_brand .

Ответы [ 4 ]

9 голосов
/ 08 октября 2008

Я бы рекомендовал использовать синтаксис в квадратных скобках ([] и []=) вместо read_attribute и write_attribute. Синтаксис в квадратных скобках короче и предназначен для переноса защищенных методов read / write_attribute .

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

def brand=(b)
  self[:brand] = reverse_transform(b)
end
7 голосов
/ 08 октября 2008

Вместо прямого доступа к @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
1 голос
/ 06 сентября 2015

Поскольку последний ответ был опубликован 7 лет назад, я внесу то, что предлагает Rails API .

def brand
  super.humanize
end

Humanize превращает «this_is_a_brand» в «Это бренд»

0 голосов
/ 08 октября 2008

В вашей модели вы можете переопределить вызов метода brand.

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

Это позволит сохранить его как this_is_a_brand. Но он будет возвращен как «это бренд».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...