これで、コントローラーへの参照を持たないビジネス ロジック オブジェクトができました。しかし、現在のユーザーを取得したいと思います。これにアクセスする方法はありますか?
では、現在のユーザーをこれらのメソッドに渡すことができないのはなぜでしょうか?
さらに、それらを混在させることができます。
静的ヘルパーを作成することは強くお勧めしません (これは Java ではなく、Ruby です!)。代わりに、これらのヘルパーが必要な場所にモジュールとして含めます。
module SuperLogic
def calculate_stuff(current_user=nil)
(current_user || user || self).bills.sum
end
edn
次に、必要な場所にこれを含めます。
# user model
class User
include SuperLogic
#it will get the `calculate_stuff` method
end
# controller
include SuperLogic
# so you can use it as one of
calculate_stuff user
calculate_stuff
等々...
さらに、ビジネスロジックにアクセスする場所では、「静的」メソッドの代わりにクラスのインスタンスを作成できます(ルビーでは「クラス」メソッドです):
# controller
def calculate
@result = BusinessLogic.new(user).calculate_stuff
end
これはおそらくあなたができる最も簡単なことです。
実際、ビジネス オブジェクトの HTTP コンテキスト全体にアクセスする必要はありません (テストについて話しているわけではありません)。