В rails, имеет ли значение использование локальной переменной или переменной экземпляра в методах действия? - PullRequest
9 голосов
/ 25 октября 2011

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

Ответы [ 3 ]

10 голосов
/ 25 октября 2011

Не принято создавать переменные экземпляра, если они не отправляются в представление.

  • Переменные должны иметь максимально возможную область видимости.
  • Они должны быть локальными, еслиони не передаются в представление.
  • Используйте презентатор, если у вас есть "много" данных представления (вместо тонны переменных экземпляров).

Переменные экземпляра может использоваться , если на них воздействуют несколько методов перед представлением, даже если они не используются в представлении, но это делает код намного сложнее рассуждать и тестировать изолированно.

Если вы используете переменные экземпляра для хранения промежуточных вычислений, вам, вероятно, нужно переосмыслить свой поток и / или дизайн.

7 голосов
/ 25 октября 2011

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

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

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

4 голосов
/ 25 октября 2011

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

Если у вас нет состояния, то у вас нетлюбые переменные экземпляра, поэтому нет смысла их использовать.

...