2014-09-25 77 views
0

我有一個與軌道4.1.5 before_action有問題,它似乎完全被我的新應用程序忽略。Before_action忽略軌道4.1.5

我想在我的應用程序使用的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 

我的 '大' 控制器:

class WelcomeController < ActionController::Base 
    def helloworld 
    end 
end 

我的路線.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

這是因爲您在兩種情況下都從ActionController::Base繼承。如果你想在行動之前,在所有的控制器都運行繼承所有的人都從你的ApplicationController

class WelcomeController < ApplicationController 
    def helloworld 
    end 
end 
+0

謝謝,我真的很白癡:) – Ayoros 2014-09-25 15:58:55