как правильно добавить классы в контроллер в рельсах?

Если мне нужно добавить (конкретные для проекта) классы в мой контроллер в рельсах, как правильно/место поместить и «включить» их/там файлы .rb? (кавычки: ключевое слово ruby ​​не включает)

Я новичок в рельсах и не нашел правильного пути. LIB звучит как для большего количества общедоступных библиотек и, как я узнал, не перезагружается по умолчанию в режиме разработки.

конечно, я мог бы поместить все в controler.rb, но...


ответ для меня:

Во-первых: нет никаких правил, если вы помните (или изучаете, как я) правила рельсов: NameOfCla -> name_of_cla(.rb) ‹-- не используйте class как слово для очистки

назовите свой класс, как вам нравится:

class ExtendCon #<--- not using controller here for clearence
    ....

поместите его в файл extend_con.rb, дождитесь объяснения пути, пожалуйста. если вы назвали свой класс «MYGreatThing», это будет «m_y_great_thing» (никогда не проверяйте это), поэтому избегайте китайских иероглифов

если ваш контроллер использует

@letssee=ExtendCon.new

rails самостоятельно изучает этот класс и файл (extend_con). я так и не понял нужен ли перезапуск сервера. (первый раз)

выберите путь для размещения файла: (я предпочитаю путь Дейва) app/myexten или что вам нравится, делая его специфичным для приложения и по-прежнему отбрасывая стандартные рельсы "вещи"

если вы не такие ленивые, как я (я поместил это в приложение / ontrollers), поместите выбранный вами путь в config/application.rb лайк (комментарии есть, чтобы найти его)

# Custom directories with classes and modules you want to be autoloadable.
# config.autoload_paths += %W(#{config.root}/app/controllers)
config.autoload_paths += %W(#{config.root}/app/myexten)   

этот работает для меня во всех режимах, включая «разработчик», и мне не нужно было помещать «свои» вещи в app/lib


person halfbit    schedule 25.07.2013    source источник


Ответы (2)


Это зависит.

Я склонен помещать код библиотеки, используемый явно (например, созданный, внедренный и т. д. в артефакты уровня приложения) в app/xxx, где xxx означает «тип» вещи, например decorators, services и т. д.

Волшебные вещи имеют тенденцию заканчиваться lib, например, обезьяньи патчи, артефакты архитектурного уровня и так далее.

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

person Dave Newton    schedule 25.07.2013
comment
Почему нет чего-то вроде рельсов, добавляющих класс [файл] [в группу] [и т. д.], что для меня звучало бы строго - person halfbit; 25.07.2013
comment
@RolandMayer Вероятно, потому что нет веских причин быть таким строгим; IMO Rails не должен так самоуверенно относиться к тому, как организован ваш код. - person Dave Newton; 25.07.2013
comment
ваша точка зрения, я все еще борюсь с тем, что (автоматически) перезаписывается по запросу (в режиме разработки), а что нет, поэтому я подумал, что рассказать RAILS, посмотрите, возьмите это тоже, было бы идеей - person halfbit; 25.07.2013
comment
@RolandMayer Разве config.autoload_paths не для этого? - person Dave Newton; 25.07.2013

Rails 4 поставляется с внутренним каталогом для контроллеров, называемых проблемами. Вы могли бы попробовать использовать это.

app/controlls/concerns

Если у вас есть concerns/foo_bar.rb, вы включаете его следующим образом:

class FooController < ApplicationController
  include FooBar
end

У моделей также есть собственный каталог задач. Я нахожу этот подход полезным, и его можно применить к Rails 3. Вам просто нужно добавить каталоги в пути загрузки.

person Mohamad    schedule 25.07.2013
comment
я все еще чувствую, что рельсы "добавить класс..." были бы строгими, хотя у Дейва выше есть другое мнение - person halfbit; 26.07.2013