alias_attribute и создание и метод с исходным именем атрибута вызывает цикл

StackOverflow https://stackoverflow.com/questions/2924153

Вопрос

Я пытаюсь динамически создавать цепочку метода в одном атрибуте в моей модели. К настоящему времени у меня есть эта функция:

def create_filtered_attribute(attribute_name)
          alias_attribute "#{attribute_name}_without_filter", attribute_name

          define_method "#{attribute_name}" do
            filter_words(self.send("#{attribute_name}_without_filter"))
          end
end

Поэтому я получаю строку с именем атрибута, псевдоним его для '_without_filter.'(alias_method или alias_method_chain не удается здесь, потому что атрибут не там, когда класс создан), и я создаю новый метод с именем атрибута, где я отфильтрую его содержимое.

Но как-то, когда я звоню "# {attribute_name} _without_filter" Это называет мой новый метод (я думаю, потому что alias_attribute некоторые как), и программа переходит в цикл стека.

Я пытаюсь переименовать этот атрибут, поэтому я могу использовать его имя для метода ...

Может кто-нибудь, пожалуйста, просветите меня на этом.

Это было полезно?

Решение

Существует разница между alias_method а также alias_attribute. alias_method. на самом деле делает а скопировать старого метода, тогда как alias_attribute. просто определяет новые методы, которые позвонить старым.

Обратите внимание, что model.attribute а также model.attribute= Методы в ActiveRecord просто звоните read_attribute. а также write_attribute., Таким образом, вы всегда можете получить доступ к вашему атрибуту, даже если вы переопределите его до Getter или Setter:

  define_method "#{attribute_name}" do
    filter_words(self.read_attribute(attribute_name))
  end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top