5

私はちょうどレールに入り、ゆっくりとそれを理解し始めています。誰かがapplication_controller内でコーディングする利点や、いつ、なぜかについて説明したり、アイデアを教えてもらえますか?いくつかのユースケースは何ですか。Railsアプリのアプリケーションコントローラーをどのように使用していますか?私が理解していることから、このコントローラーはすべての要求に対して呼び出されるため、あまり多くのコードをそこに入れたくありません。これは本当ですか?

4

2 に答える 2

8

ApplicationControllerは、実際には、アプリケーション内の他のすべてのコントローラーが継承するクラスです(ただし、これは必須ではありません)。

ApplicationControllerがコードを配置するのに適した場所である場合もありますが、あまり多くのコードを乱さず、クリーンで整頓された状態に保つという態度に同意します。例:複数のロケールファイルを使用していて、要求されたURLに基​​づいてロケールを設定する場合は、ApplicationControllerでこれを行います。

before_filter :set_locale

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end

これにより、各コントローラーでロケールを個別に設定するという頭痛の種を回避できます。これを1回実行すると、システム全体にロケールが設定されます。

protect_from_forgery同じことが、新しいRailsアプリのデフォルトのApplicationControllerにある有名なものにも当てはまります。

別のユースケースは、アプリケーション内の特定のタイプのすべての例外を救済することです。

rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found
private
def record_not_found
  render :text => "404 Not Found", :status => 404
end

一般に、他のすべてのコントローラーが確実に使用する機能がある場合は、ApplicationControllerが適している可能性があります。

于 2012-10-21T06:12:47.283 に答える
0

複数のコントローラーで使用する必要のあるヘルパーやメソッドに使用します。良い例は、ライアン・ベイツの「ゼロからの超シンプルな認証」です。

class ApplicationController < ActionController::Base
  protect_from_forgery

  helper_method :admin?

  protected

  def authorize
    unless admin?
      flash[:error] = 'Sorry, that page is only for admins'
      redirect_to :root
      false
    end
  end

  def admin?
    session[:password] == "password"
  end
end

次に、アプリ内のどこからでも、before_filter :authorizeまたはif admin?どこからでも実行できます。

于 2012-10-21T18:08:41.413 に答える