Если вы создаете новую модель, вы можете заставить ее наследовать методы от существующего класса.
Пример (app / models / mykindofstring.rb):
class Mykindofstring < String
def all_caps_and_reverse
self.upcase.reverse
end
end
Затем с контроллера:
@my_string = Mykindofstring.new('This is my string')
и, наконец, вызывая его из вида:
<%= @my_string %>
отображается как Это моя строка, а:
<%= @my_string.all_caps_and_reverse %>
отображается как GNIRTS YM SI SIHT.
Класс наследуется от строкового класса, поэтому все методы, применяемые к строке, также применяются к объекту mykindofstring. Метод в нем - это просто новое имя для комбинации двух существующих строковых методов, но вы можете заставить его делать все, что захотите, например, метод для преобразования времени в форматированную строку.
По сути, это просто расширение текущего класса Ruby с помощью ваших собственных методов вместо использования функций / помощников.
Major Edit
Основываясь на комментариях Янса к этому ответу и его собственном ответе на вышеуказанный вопрос, я немного поиграл в Rails и придумал добавить это в application_helper.rb:
module ApplicationHelper
String.class_eval do
def all_caps_and_reverse
self.upcase.reverse
end
end
end
Теперь просто вызовите метод для любой строки в приложении:
@string = 'This is a string.'
@string.all_caps_and_reverse
.nirts si sihT