украшение атрибута в направляющих

$('#mySelect')
    .find('option')
    .remove()
    .end()
    .append('<option value="whatever">text</option>')
    .val('whatever')
;
5
задан Simone Carletti 15 November 2010 в 15:19
поделиться

3 ответа

Я предлагаю вам создать дополнительный метод с вашими пользовательскими программами форматирования.

class Person

  def formatted_name
    name.capitalize
  end

end

Это лучшее решение по сравнению с перезаписью реализация по умолчанию, потому что сеттеры и геттеры могут вызываться при обновлении / записи / сохранении записи в базе данных. Я помню, как однажды я переписал реализацию атрибута по умолчанию и каждый раз, когда запись сохранялась, атрибут обновлялся с форматированным значением.

Если вы хотите следовать этим путем, вы можете использовать alias_method_chain или воспользоваться преимуществом наследования, включая внешний модуль.

class Person

  def name_with_formatter
    name_without_formatter.capitalize
  end
  alias_method_chain :name, :formatter

end

Также вы можете перезаписать name и вызвать read_attribute (: name) из вашего собственного метода.

def name
  read_attribute(:name).capitalize
end

def name
  self[:name].capitalize
end

Опять же, не делайте этого. Создайте собственный метод.

14
ответ дан 18 December 2019 в 10:48
поделиться

Но что происходит, когда name имеет значение null?

capitalize вызовет неопределенный метод для nil :: Class, если self [: name ] возвращает nil.

Следующее покрывает это:

def name
  self[:name] ? self[:name].capitalize : nil
end

Но я согласен, что вы должны создать форматированный метод и оставить метод имени как есть. Никогда не знаешь, когда тебе могут понадобиться необработанные данные.

К вашему сведению: причина, по которой ваш метод не сработал, заключалась в том, что он вызывал, как я люблю называть, цикл саморекламы. Вы переопределяете метод, но вызываете метод в новом методе. Таким образом, вы должны использовать self [: name] или read_attribute для доступа к внутренним данным модели.

2
ответ дан 18 December 2019 в 10:48
поделиться

Попробуйте следующее:

def name
  self[:name].capitalize
end
0
ответ дан 18 December 2019 в 10:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: