Rails模型控制器最佳实践

时间:2011-08-24 12:29:10

标签: ruby-on-rails model-view-controller

我有将用户发送到月球的基本功能:

#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 个答案:

答案 0 :(得分:3)

根据SRP,我坚持选择1。

控制器是指挥:它负责逻辑并且更具可读性。

另一种方法是在模型中创建一个命名良好的方法,该方法将处理逻辑并在需要时触发另一个方法。

不要忘记测试!

答案 1 :(得分:1)

模型中的条件会更好。

但这取决于要求。 如果需要在方法调用时显示,则在模型中需要显示。 只有从此动作调用,您需要显示消息然后控制器中的条件是好的。