我有使用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被忽略了,但为什么呢?
答案 0 :(得分:1)
这是因为在这两种情况下你都是从ActionController::Base
继承的。如果您希望在所有控制器中运行之前的操作,请从ApplicationController
class WelcomeController < ApplicationController
def helloworld
end
end