我正在用 Rails 3.1 编写一个类似酒店的应用程序,而且我是 Rails 新手。我需要一些关于如何编写应用程序服务层中通常管理的内容的建议。
该应用程序需要一些服务来计算价格,并且这种方法必须可用于多个控制器。直到现在我把所有这些东西都放在一个控制器中,但现在我必须从那里取出它,我真的不知道如何以及在哪里。
我考虑过编写一个助手并将其包含在控制器中,但我不喜欢这个解决方案,因为助手应该只帮助在视图中渲染内容,并且它们不应该与业务层相关的任务混为一谈。
你将如何编码?
我正在用 Rails 3.1 编写一个类似酒店的应用程序,而且我是 Rails 新手。我需要一些关于如何编写应用程序服务层中通常管理的内容的建议。
该应用程序需要一些服务来计算价格,并且这种方法必须可用于多个控制器。直到现在我把所有这些东西都放在一个控制器中,但现在我必须从那里取出它,我真的不知道如何以及在哪里。
我考虑过编写一个助手并将其包含在控制器中,但我不喜欢这个解决方案,因为助手应该只帮助在视图中渲染内容,并且它们不应该与业务层相关的任务混为一谈。
你将如何编码?
也许您可以创建一个名为services
/app
/controllers
/services
calculation_service.rb
然后你像这样在你的控制器上使用它:
def show
@model = Model.find(params[:id])
@total = CalculationService.calculate_sum(@model.price, @model.subtotal)
end
我什至不会在控制器中这样做。如果可能的话,我会将逻辑推送到您的模型中。如果多个模型都需要它,我会在您的 lib 文件夹中创建一个 mixin 并将其包含在每个模型中。