データを取得してレポートを生成するために使用する多くのモデルがあります。
レポートを保存する必要はありません。つまり、アクティブなレコードではありません。
しかし確かに、レポートのデータを生成するコードは 80 行ほどあります。
これらの行はどこに配置すればよいですか?
それらは現在コントローラーにありますが、コントローラーは薄いはずなので、それが最適な場所かどうかはわかりません。
データを取得してレポートを生成するために使用する多くのモデルがあります。
レポートを保存する必要はありません。つまり、アクティブなレコードではありません。
しかし確かに、レポートのデータを生成するコードは 80 行ほどあります。
これらの行はどこに配置すればよいですか?
それらは現在コントローラーにありますが、コントローラーは薄いはずなので、それが最適な場所かどうかはわかりません。
app に というディレクトリを作成し、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