Где открыть класс в RoR - PullRequest
9 голосов
/ 04 мая 2010

Я пытаюсь открыть класс String в rails и добавить еще несколько методов для моего приложения. Написание кода не проблема - мой вопрос скорее о том, куда этот код должен идти.

Мне не имеет смысла заново открывать класс внутри другого файла модели, потому что он действительно не имеет никакого отношения к какой-либо конкретной модели. Я подумал, что, возможно, где-то в config или lib будет иметь смысл, но я пока не особо разбираюсь в RoR.

Подводя итог, где было бы наиболее логичное место для определения кода, модифицирующего класс, и есть ли какие-либо последствия в зависимости от того, где и когда код загружается?

Ответы [ 2 ]

20 голосов
/ 04 мая 2010

Наиболее логичное место, вероятно, находится в файле в каталоге config/initializers. Любой файл *.rb, который вы здесь поместите, будет автоматически выполнен при загрузке rails. Если вы хотите, вы можете поместить их в подпапку, чтобы сделать что-то вроде config/initializers/extensions/*.rb.

7 голосов
/ 04 мая 2010

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

В последнее время я предпочел хранить файлы в таких папках, как lib / monkey / string.rb, lib / monkey / hash.rb и т. Д. Затем мне требуются все файлы в папке lib / monkey в моем environment.rb файл.

# Load all monkey-patches.
Dir["lib/monkey/*.rb"].each {|monkeyfile| require monkeyfile}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...