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

这将使您免去在每个控制器中分别设置语言环境的麻烦。您只需执行一次,您就可以在整个系统中设置区域设置。

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

我将它用于需要在多个控制器中使用的助手和方法。一个很好的例子是Ryan Bates “Super Simple Authentication from Scratch”

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 :authorizeif admin?任何地方。

于 2012-10-21T18:08:41.413 回答