1. ホーム
  2. ruby-on-rails

[解決済み] Railsのプロテクテッドメソッドとプライベートメソッド

2023-07-25 09:19:19

質問

Rubyにおけるメソッドの可視性(public, protected, privateメソッド)については、以前から このブログの記事 . しかし、Ruby on Railsでは、フレームワークの設定方法から、通常のRubyアプリケーションの場合とは少し異なるようです。では、Railsのモデル、コントローラ、ヘルパー、テストなどにおいて、protectedメソッドとprivateメソッドの使い分けはいつが適切で、いつが適切でないのでしょうか?

編集 : これまでの回答ありがとうございました。Rubyのprotectedとprivateの概念は理解していますが、私はむしろ、Railsアプリのさまざまな部分(モデル、コントローラ、ヘルパー、テスト)のコンテキスト内でこれらのタイプの可視性が使用される典型的な方法についての説明を求めています。例えば、コントローラのpublicメソッドはアクションメソッドであり、アプリケーションコントローラのprotectedメソッドは複数のコントローラからアクセスされる必要がある"ヘルパーメソッド"に使用されます、などです。

どのように解決するのですか?

モデルの場合、パブリックメソッドはクラスの公開インターフェースであるという考え方があります。パブリックメソッドは他のオブジェクトから利用されることを想定しており、プロテクト/プライベートメソッドは外部から見えないようにすることを想定しています。

これは他のオブジェクト指向言語と同じ慣習です。

については コントローラや のテストは、好きなようにすればいいのです。 テストクラスはフレームワークによってのみインスタンス化され、呼び出されます ( はい、理論的にはビューからコントローラを取得できることは知っていますが、そうすると、とにかく何かがおかしいのです ). 誰もそれらを直接作成することはないので、quot;protect" から守るものは何もないのです。

追記・訂正です。 コントローラの場合、"helper" メソッドに protected private とマークし、アクション自身は public とします。フレームワークは、パブリックでないアクション/メソッドへのHTTPコールを決してルーティングしませんので、ヘルパーメソッドはそのように保護されるべきです。

ヘルパーのために、メソッドがprotectedであるかprivateであるかは、それらが常に"direct"で呼び出されるため、違いは生じません。

もちろん、あなたが理解しやすくなるのであれば、すべてのケースで保護されたものをマークすることができます。