1

Rails アプリケーションを作成しています。この 1 つのコントローラーでは、から継承するため、レンダリングするレイアウトを指定する必要がありますActionController::Base。私の他のコントローラーのいくつかには、ActionController だけがあり、アプリケーションのレイアウトを自動的に使用します。を削除するたびに::Base、ページにアクセスすると次のメッセージが表示されますsuperclass must be a Class (Module given)

なぜActionController::Baseこのコントローラでは継承が重要であるのに、他のコントローラでは重要ではないのでしょうか?

4

2 に答える 2

2

あなたの質問に直接答えるにActionControllerは、コントローラークラスではなく、コントローラースタック全体に電力を供給する名前空間モジュールです。ActionController通常の Rails 開発中にモジュールを操作することはありません。ActionController::Base実際にはコントローラーが継承するクラスです。これが、から継承できない理由ですActionController

しかし、ここでは 2 つのコントローラーが機能していると思います。ActionController::BaseApplicationController。がないと勘違いApplicationControllerしているかもしれません。ActionController::Base

ActionController::BaseRails のすべての機能の元となるメインのコントローラー クラスです。ApplicationControllerメソッドを追加して、他のすべての Rails コントローラーを継承できる一般化されたコントローラーです。

コントローラーの 1 つで別のレイアウトを使用するには、次のようにします。

class AuthenticationController < ApplicationController
  layout 'authentication'
end

を直接使用するか、AuthenticationController新しいコントローラに から継承させることができますAuthenticationController

于 2012-03-11T16:58:11.213 に答える
0

コントローラーは から継承する必要がありApplicationControllerます。これにより、アプリケーションのレイアウトを自動的にレンダリングできます。ApplicationController は ActionController::Base を拡張します。

于 2012-03-10T21:21:27.027 に答える