Лучшая практика для Rails Model Controller - PullRequest
0 голосов
/ 24 августа 2011

У меня есть базовые функции для отправки пользователя на Луну:

#Action in a controller
  def outer_space
    user = User.find(params[:id])
    user.board_rocket_to_the_moon
  end


#user model
def board_rocket_to_the_moon
  #put on space suit, climb in rocket, etc.
end

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

Лучше ли поместить оператор if в контроллер или модель и почему?

#option 1: Put an if in the controller
  def outer_space
    user = User.find(params[:id])
    user.board_rocket_to_the_moon if user.likes_to_travel
  end


#option 2:  Stick the if in the user model
def board_rocket_to_the_moon
  if self.likes_to_travel
    #put on space suit, climb in rocket, etc.
    return "BLAST OFF"
  else
   return "There is no way THIS dude is getting on THAT ship."
  end
end

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Согласно SRP , я бы придерживался варианта 1.

Контроллер является проводником: он отвечает за логику и более читабелен.

Альтернативой может быть создание в вашей модели метода с именем с именем, который будет обрабатывать логику и запускать другой метод при необходимости.

Не забудьте про тесты!

1 голос
/ 24 августа 2011

Состояние в модели будет лучше.

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

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