将有关在ruby中生成报告的所有逻辑放在轨道上的最佳位置是什么?

Bis*_*lli 2 ruby-on-rails code-organization project-organization

我有很多模型用于获取数据并生成报告.

报告不需要存储,即它不是活动记录.

但肯定有80行代码可以生成报告的数据.

我应该把这些线放在哪里?

他们目前在控制器中,但由于控制器应该很薄,我不确定这是不是最好的地方.

Fit*_*ons 11

我会在应用程序中创建一个名为的目录reports,并将所有报告放在那里.

只要文件名和类遵循常规约定,就可以找到rails中app目录中的所有内容.

例如,如果您有以下内容app/reports/example_report.rb:

class ExampleReport
  def initialize
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

您可以从控制器中使用它:

class SomethingController < ApplicationController
  def something
    example = ExampleReport.new
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)

依赖于模型的报告被视为应用程序域的一部分,这就是我推荐app目录的原因.在应用程序中添加子目录的简便性意味着您可以在应用程序中维护不同角色的逻辑分离.不应该猜测某事的实现在哪里.控制器在app/controllers,模型在app/models,所以它遵循报告app/reports.例如,如果您要向应用添加通用服务类,他们可以进入app/services.

相反,它们不属于lib,因为它们不能以通用方式运行.为了进一步说明,只有您可以设想在任何 rails项目中使用的代码都属于lib目录.