Before_action忽略了rails 4.1.5

时间:2014-09-25 15:51:43

标签: ruby-on-rails ruby-on-rails-4 internationalization

我有使用rails 4.1.5的before_action有问题,我的新应用程序似乎完全忽略了它。

我试图在我的应用中使用I18n,我按照文档:http://guides.rubyonrails.org/i18n.html

应用程序控制器:

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  # Set current language to user params[:locale] if exists otherwise, the default_locale is used(en)
  before_action :set_locale

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

  def default_url_options(options={})
    logger.debug "default_url_options is passed options: #{options.inspect}\n"
    { locale: I18n.locale }
  end

end

我的&#39;大&#39;控制器:

class WelcomeController < ActionController::Base
  def helloworld
  end
end

我的routes.rb:

Rails.application.routes.draw do
  scope "/:locale" do
    get '/' => 'welcome#helloworld'
  end 
end

en.yml:

en:
  hello: "Hello world !"

fr.yml:

fr:
  hello: "Bonjour le monde !"

我试图直接在我的控制器中更改I18n.locale,这样就可以了......

class WelcomeController < ActionController::Base
  def helloworld
    I18n.locale = :fr
  end
end

这就是为什么我认为我的before_action被忽略了,但为什么呢?

1 个答案:

答案 0 :(得分:1)

这是因为在这两种情况下你都是从ActionController::Base继承的。如果您希望在所有控制器中运行之前的操作,请从ApplicationController

继承所有这些操作
class WelcomeController < ApplicationController
  def helloworld
  end
end