以下は私の使用例です -Rails - コントローラのヘルパーはどこに行けばよいですか?
GoogleにAPI呼び出しを行うコントローラメソッド(アクション)があります。私はlib
フォルダに入れたクラスGoogle
を作成しました。クラスGoogle
は、API呼び出しメソッドを提供します。
def self.list_items(folder_id, access_token)
result = RestClient.get "#{API_URL}/drive/v2/files",
{
:Authorization => "Bearer #{access_token}",
:params => {:q => "'#{folder_id}' in parents and trashed=false"}
}
return JSON.parse(result)['items']
end
は、しかし、私はGoogle
からlist_items
を呼び出すメソッドを記述する必要があり、access_tokenはは、有効期限が切れるaccess_tokenは更新され、データベースに新しいaccess_tokenはを保存し、再びlist_items
呼び出しを行う場合には、例外をキャッチします。
このメソッドはデータベースとやりとりする必要があるため、クラスに入れないようにします(lib
)。私はレールが初めてで、lib
フォルダにサードパーティ製のコードが必要であることを理解しました。クラスGoogle
は、レールプロジェクトやビジネスロジックとは関係なく、POROとしてサードパーティのクラスと考えることができます。この理解が間違っている場合は、私を修正してください。
私はこのメソッドをコントローラのプライベートメソッドとして保持できますが、そのようなメソッドが複数あると想定します。コントローラが太ってしまうのではないでしょうか?
また、コントローラはFileApiController
ですが、これらのメソッドはすべてGoogle固有のものです。また、ボックスとドロップボックスに固有のメソッドもあります。私は理想的にはGoogleHelper
、DropboxHelper
等のクラスを作成したいと考えています。これもdbと対話します。このクラスはどこに保管しますか?
私はGrailsのバックグラウンドから来ており、通常GoogleHelper
はGrailsのgoogleServiceのようなサービスとして作られます。それをする方法は何ですか?具体的には、もし私がGoogleHelper
クラスを作るなら、それをどこに保管しますか?ヘルパーフォルダはビューヘルパーを保持するためだけだと思います。あなたは今、あなたはあなたのヘルパーを呼び出すことができ、その後のコントローラでGoogleHelper
を呼び出すapplication_controller.rb
このinclude GoogleHelper
でそれを追加したい場合は
list_items内のコードを削除することができます。ここでは、代わりに「Google.list_items」を呼び出します。あなたのソリューションは良いようですが、私はヘルパーフォルダの下のクラスは、ほとんどのビューヘルパーのためだと思った。コントローラのヘルパーをヘルパーフォルダの下に置いておくのが一般的な方法ですか? – vishesh
はい、その良い習慣は、コントローラとビューのヘルパーを使用することです。 – 7urkm3n
また、ヘルパー 'GoogleHelper.print_hello'もMODELファイルで呼び出すことができます。 – 7urkm3n