我有很多模型用於獲取數據並生成報告。把所有關於在rails上生成報表的邏輯放在軌道上的最佳地點是什麼?
報告不需要存儲,即它不是活動記錄。
但肯定有80行代碼爲報告生成數據。
我應該在哪裏放這些線?
他們目前在控制器中,但由於控制器應該很薄,我不確定這是否是最好的地方。
我有很多模型用於獲取數據並生成報告。把所有關於在rails上生成報表的邏輯放在軌道上的最佳地點是什麼?
報告不需要存儲,即它不是活動記錄。
但肯定有80行代碼爲報告生成數據。
我應該在哪裏放這些線?
他們目前在控制器中,但由於控制器應該很薄,我不確定這是否是最好的地方。
我會創建的應用程序稱爲reports
目錄,並把所有的我的報告在那裏。
只要文件名和類遵循常規慣例,就可以找到rails中應用程序目錄中的所有內容。
例如,如果你有在app/reports/example_report.rb
如下:
class ExampleReport
def initialize
...
end
end
你將能夠使用它從你的控制器是這樣:依靠模型
class SomethingController < ApplicationController
def something
example = ExampleReport.new
...
end
end
報告被認爲是部分你的應用程序的域名,這就是爲什麼我建議應用程序目錄。在應用程序中輕鬆添加子目錄意味着您可以在應用程序中保持不同角色的邏輯分離。不難猜測某個東西的實現在哪裏。控制器在app/controllers
中,型號爲app/models
,因此報告爲app/reports
。例如,如果您要將通用服務類添加到您的應用程序,則可以使用app/services
。
相反,它們不屬於lib,因爲它們不能以通用方式運行。爲了進一步說明這一點,只有您可以設想在任何 rails項目中使用的代碼才屬於lib目錄。
我會說那樣的東西屬於輔助方法/方法。
Helpers
應該是更好的地方把這些代碼,
還要確保純粹的邏輯相關的代碼讀取/處理的數據應該還是去model
糾正我,如果我錯了,但不是旨在定義格式數據的方法的幫助器?打印字符串或不同格式的數字?他們應該管理關於數據的邏輯嗎?你說這應該去我的模型,但如果我沒有與該報告相關的模型?我應該爲每個要生成的報告創建一個非持久模型嗎? –
當你的業務邏輯不依賴於持續性,你可以把它放在沒有從ActiveRecord繼承的模型中。請參閱:
優秀的答案。謝謝。 –