Нет. alias_method
- это стандартный метод от Ruby. alias_method_chain
- это дополнение к Rails, разработанное для упрощения общего действия по наложению старого метода на новое имя, а затем на новый метод к исходному имени. Так, если, например, вы создаете новую версию метода method
с новой функцией new_feature
, следующие два примера кода эквивалентны:
alias_method :method_without_new_feature, :method
alias_method :method, :method_with_new_feature
и
alias_method_chain :method, :new_feature
EDIT
Вот гипотетический пример: предположим, у нас был класс Person с методом rename
. Все, что он делает, это берет строку типа «Джон Доу», разделяет ее на части и присваивает части first_name и last_name. Например:
person.rename("Steve Jones")
person.first_name #=> Steve
person.last_name #=> Jones
Теперь у нас проблема. Мы продолжаем получать новые имена, которые не пишутся с заглавной буквы. Таким образом, мы можем написать новый метод rename_with_capitalization
и использовать alias_method_chain
для решения этого:
class Person
def rename_with_capitalization(name)
rename_without_capitalization(name)
self.first_name[0,1] = self.first_name[0,1].upcase
self.last_name[0,1] = self.last_name[0,1].upcase
end
alias_method_chain :rename, :capitalization
end
Теперь старый rename
называется rename_without_capitalization
, а rename_with_capitalization
- rename
. Например:
person.rename("bob smith")
person.first_name #=> Bob
person.last_name #=> Smith
person.rename_without_capitalization("tom johnson")
person.first_name #=> tom
person.last_name #=> johnson