2016-04-01 16 views
1

私はdeviseを使用しており、サービスオブジェクトを作成しました。すべてが期待通りに機能しています。しかし、私はcurrent_userをどのように含めるかを知りたいですか?私は常にcurrent_userまたはuser_signed_inを渡さなければならない瞬間ですか?異なるクラスとビューで同じメソッドを使用しているときに迷惑をかける変数railsサービスオブジェクトとcurrent_user

は現在、私はテストのためにこれを持っている:

class User 
    class GetStart 
     attr_reader :current_user 

     def initialize(user) 
      current_user = user 
      p current_user 
     end 
    end 
end 
+0

initializeメソッドで '@current_user = user'にする必要があります。そうしないと、' attr_reader'は何も返しません。 –

答えて

1

current_userは通常、それだけであなたのコントローラやビュー内でアクセスすることができます意味ApplicationControllerにするヘルパーメソッドです。これは良いことです - あなたのサービスオブジェクトはcurrent_userに直接アクセスするビジネスを持っていません。なぜなら、current_userはコントローラの関心事であるリクエスト/セッションで渡された情報から作成されるからです。

私の意見では、あなたのアプローチは正しいです。別のオブジェクト内のメソッドに直接結合するよりも、外部オブジェクト(つまり依存性注入)としてユーザーオブジェクトを渡すことが望ましいです。結局、あなたのサービスオブジェクトは、userがセッションから来たものかどうかを知っているか気にする必要がありますか?

また、attr_readerはクラスのインスタンス変数を作成するので、@current_user = userが必要です。

関連する問題