[解決済み] Railsのプロテクテッドメソッドとプライベートメソッド
質問
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"で呼び出されるため、違いは生じません。
もちろん、あなたが理解しやすくなるのであれば、すべてのケースで保護されたものをマークすることができます。
関連
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み] Rubyのクラスで未初期化の定数エラーが発生する
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] visibility:hiddenとdisplay:noneの違いは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み】RailsでOOデザイン。どこにものを置くか
-
Railsコントローラ用のRubyヘルパーメソッドをどこに置くか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み】Bundler: コマンドが見つからない
-
[解決済み] RailsのRootディレクトリのパス?
-
[解決済み] rspec 3 - クラスメソッドをスタブ化する
-
[解決済み] Oauth2 Instagram API "リダイレクトURIが登録されたリダイレクトURIと一致しない"
-
[解決済み] rspecにおけるassignsの意味
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] rails consoleを起動するとRailsのイニシャライザーが呼ばれる?
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]
-
[解決済み] Railsコンソール:リロード!モデルファイルの変更が反映されない?考えられる理由は何でしょうか?