我有许多模型用于获取数据并生成报告。
报告不需要存储,即它不是活动记录。
但肯定有大约 80 行代码可以为报告生成数据。
我应该把这些线放在哪里?
它们目前在控制器中,但由于控制器应该很薄,我不确定这是否是最好的地方。
我有许多模型用于获取数据并生成报告。
报告不需要存储,即它不是活动记录。
但肯定有大约 80 行代码可以为报告生成数据。
我应该把这些线放在哪里?
它们目前在控制器中,但由于控制器应该很薄,我不确定这是否是最好的地方。
我会在应用程序中创建一个名为 的目录reports
,并将我的所有报告都放在那里。
只要文件名和类遵循正常约定,rails 中的 app 目录中的所有内容都可以找到。
例如,如果您有以下内容app/reports/example_report.rb
:
class ExampleReport
def initialize
...
end
end
您将能够从您的控制器中使用它:
class SomethingController < ApplicationController
def something
example = ExampleReport.new
...
end
end
依赖模型的报告被认为是应用程序域的一部分,这就是我推荐 app 目录的原因。在应用程序中添加子目录的便利性意味着您可以在应用程序中保持不同角色的逻辑分离。不难猜测某事的实现在哪里。控制器在app/controllers
,模型在app/models
,因此报告在app/reports
。例如,如果您要向您的应用程序添加通用服务类,它们可以进入app/services
.
相反,它们不属于 lib,因为它们不能以通用方式运行。为了进一步说明这一点,只有您可以设想在任何rails 项目中使用的代码才属于 lib 目录。
我会说类似的东西属于辅助方法/方法。
当您的业务逻辑与持久性无关时,您可以将其放置在模型中,而无需从 ActiveRecord 继承。看:
Helpers
应该是放置该代码的更好地方,
还要确保用于获取/处理数据的纯逻辑相关代码仍应转到model