2014-11-01 41 views
0

我的信封軌道4 before_action有時不能很好地

  • 紅寶石2.1.4(這發生在2.1.2)
  • 的Rails 4.1.6(這發生在4.1.1)的開發工作信封

我在before_action中設置@current_store。

class Store::ApplicationController < ApplicationController 
    before_action :set_current_store 

    private 
    def set_current_store 
    Rails.logger.debug "set_current_store is called" 
    @current_store = Store.find session[:id] 
    end 
end 

class Store::FooController < Store::ApplicationController 
    def index 
    @foos = Foo.where(store_id: @current_store.id) 
    end 
end 

然後我訪問

有時運作良好,並獲得200迴應,我可以找到「set_current_store被稱爲」 development.log,但有時我得到500,我無法找到「set_current_store在development.log中被稱爲「。

然後我重新加載並得到相同的錯誤。不過,我在vim中打開store/application_controller.rb,只保存(:w)而不更改代碼。並重新加載我總是可以得到200響應。

爲什麼before_action有時會被忽略?

我的配置/環境/ development.rb

Rails.application.configure do 
    config.cache_classes = false 
    config.eager_load = false 
    config.consider_all_requests_local  = true 
    config.action_controller.perform_caching = false 
    config.action_mailer.raise_delivery_errors = false 
    config.active_support.deprecation = :log 
    config.active_record.migration_error = :page_load 
    config.assets.debug = true 
    config.assets.raise_runtime_errors = true 
    config.cache_store = :redis_store, "redis://localhost:6379/0/cache", { expires_in: 90.minutes } 
end 
+0

不要讓私人的方法,如果你想從另一個類 – Boti 2014-11-01 13:49:07

回答

0
class Store::ApplicationController < ApplicationController 
    helper_method :set_current_store 

    private 
    def set_current_store 
    Rails.logger.debug "set_current_store is called" 
    @current_store = Store.find session[:id] 
    end 
end 

class Store::FooController < Store::ApplicationController 
    before_action :set_current_store 
    def index 
    @foos = Foo.where(store_id: @current_store.id) 
    end 
end 
+0

調用它爲什麼是helper_method解決這個問題? – 2014-11-01 08:43:57

+0

@HisatakeIshibashi,我不是超級巨星,我只是想用正確的方式來編碼。接受答案,如果它確實解決問題.. – lokeshjain2008 2014-11-02 03:50:45