Я хочу использовать знакомых помощников рельсов, но с немного измененными функциональными возможностями. Как я вижу это, я хочу, чтобы иметь возможность сделать что-то вроде:Замена помощников рельсов с доступом к оригиналу
module AwesomeHelper
#... create alias of stylesheet_link_tag to old_stylesheet_link_tag
def stylesheet_link_tag(*args)
if @be_awesome
awesome_stylesheet_link_tag *args
else
old_stylesheet_link_tag *args
end
end
end
Я вижу это, у меня есть три варианта:
- Обезьяна зашивка: Переоткрытия рельсов вспомогательного модуля , Если команда rails когда-либо изменяет имя своего вспомогательного модуля, мой код становится источником хрупкости. Не непреодолимый, но не идеальный.
- Использовать разные имена методов: Попытка придерживаться общего интерфейса рельсов может быть моим падением. Мое изменение может стать источником путаницы для других разработчиков
- Способы удаления (новый): Не уверен, будет ли это работать, или будут ли те же недостатки, что и 1. Будет ли это исследовать, но это может быть хорошим отправная точка.
Итак, вопрос в том, что я застрял в одном из этих субоптимальных решений или есть другой способ, который я не рассматривал? Если я перейду на вариант 3, есть ли способ сделать это без прямого обращения к вспомогательному модулю rails?
(Примечание:. Я удалил контекст, так как он ничего не добавляет к вопросу)
Вы знаете, что ... это так безумно очевидно, я пытаюсь ломать себе голову, чтобы понять, почему Я думал, что это не сработает! Я собираюсь попробовать это сегодня вечером, и если это сработает, у меня будут серьезные слова с моим мозгом, возможно, с кирпичной стеной. После, конечно, принимая ваш ответ ...: D – user208769
@ user208769 Hehehe. Это потрясающе. Насколько я понимаю, переопределяющие методы таким образом, как правило, предпочтительнее при любых обстоятельствах. [Предки класса #] (http://ruby-doc.org/core-1.9.3/Module.html#method-i-ancestors) могут быть очень полезны при поиске хорошего места в пути поиска метода для метода захвата диспетчеризация (или когда ваш настраиваемый модуль с переопределением должен быть включен для лучшего эффекта). – Cade
Что? :) Вы должно быть шутите! Это ОГРОМНАЯ! Ваш способ включить вас в помощника в КАЖДОМ классе, который включает AssetTagHelper. Время летит, и вы или кто-то еще можете забыть о необходимости включения патча. Вы просто включаете AssetTagHelper и начинаете удивляться: почему мой сайт выглядит по-другому? Это хорошо, когда вы и разработчик патчей - это один и тот же человек. Но что, если нет? – jdoe