Ruby on rails Rails新手:您如何在Rails应用程序中使用application_controller.rb?

Ruby on rails Rails新手:您如何在Rails应用程序中使用application_controller.rb?,ruby-on-rails,ruby,model-view-controller,Ruby On Rails,Ruby,Model View Controller,我刚刚进入rails并开始慢慢理解它。有人能解释一下或给我一些关于在应用程序控制器内部编码的好处、时间和原因的想法吗?一些用例是什么。您如何为rails应用程序使用应用程序控制器?我不想在那里放太多代码,因为据我所知,每个请求都会调用这个控制器。这是真的吗 ApplicationController实际上是应用程序中的每个其他控制器都将从中继承的类(尽管这在任何意义上都不是强制性的) 我同意这样的态度,即不要把它和太多的代码混在一起,保持它干净整洁,尽管在某些情况下,ApplicationCon

我刚刚进入rails并开始慢慢理解它。有人能解释一下或给我一些关于在应用程序控制器内部编码的好处、时间和原因的想法吗?一些用例是什么。您如何为rails应用程序使用应用程序控制器?我不想在那里放太多代码,因为据我所知,每个请求都会调用这个控制器。这是真的吗

ApplicationController实际上是应用程序中的每个其他控制器都将从中继承的类(尽管这在任何意义上都不是强制性的)

我同意这样的态度,即不要把它和太多的代码混在一起,保持它干净整洁,尽管在某些情况下,ApplicationController是放置代码的好地方。 例如:如果您正在处理多个区域设置文件,并且希望根据请求的URL设置区域设置,则应在ApplicationController中执行此操作:

before_filter :set_locale

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end
这将省去在每个控制器中分别设置区域设置的麻烦。您只需执行一次,就可以在整个系统中设置语言环境

著名的
protect_from_forgery
也是如此,它可以在新rails应用程序的默认应用程序控制器上找到

另一个用例可能是拯救应用程序中特定类型的所有异常:

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

一般来说,如果您有一个所有其他控制器都肯定会使用的功能,ApplicationController可能是一个很好的地方。

我将它用于需要在多个控制器中使用的帮助程序和方法。一个很好的例子是

class ApplicationController

然后你可以在你的应用程序中的任何地方,在过滤之前使用
:authorize
if admin?

请先仔细阅读!您会得到一些想法,即应用程序控制器中的任何内容都将针对每个页面运行,对吗?只要控制器从ApplicationController继承,则过滤器将针对每个页面运行
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