Где разместить многоразовые методы для доступа контроллеров в рельсах

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

25
задан 99miles 28 April 2010 в 05:01
поделиться

3 ответа

Каталог lib - это место, где вы можете разместить модули / классы, которые могут быть смешаны или использованы контроллерами (и чем-то еще). Это может быть место для размещения кода, который не попадает в другие области (но будьте осторожны, чтобы убедиться, что библиотека сама не превращается в беспорядок). Вспомните боковые комментарии:

  • Если вы знаете, что у вас есть большое количество связанных функций, которые могут или будут использоваться в других приложениях, это может быть плагин.

  • Также стоит помнить, что нет ничего плохого в создании модели, не являющейся объектом Active Record. Итак, опять же, в зависимости от того, что у вас есть, это тоже может иметь смысл.

13
ответ дан 28 November 2019 в 07:33
поделиться

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

Для более часто используемых вещей вы можете либо вернуть их в свой ApplicationController (если они используются во всех контроллерах), либо в класс в вашем каталоге app / models. Я рекомендую каталог models, а не lib, потому что Rails в режиме разработки намного лучше обнаруживает изменения в этих файлах и перезагружает их. Изменения файлов в / lib обычно требуют перезапуска веб-сервера, что замедляет ваши усилия по разработке. Это прискорбно, потому что помощники контроллера действительно не следует смешивать с моделями.

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

1
ответ дан 28 November 2019 в 07:33
поделиться

Создать файл модуля в каталоге lib:

module ControllerUtil
  def foo
  end

  def bar
  end
end

Включить модуль в контроллер:

class UsersController < ApplicationController
  include ControllerUtil
end
10
ответ дан 28 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: