2014-10-02 31 views
0

我需要的是禁用rails中的自動頁面(HTML)渲染並使用after_action方法覆蓋它。我試圖實現的是相當於CakePHP $ this-> autoRender = false;在rails中禁用自動渲染

application_controller.rb

class ApplicationController < ActionController::Base 

    after_action :custom_render 

    layout nil # Tried this but didn't worked 

    def custom_render 
     render #[...] 
    end 


end 

some_controller.rb

class SomeController < ApplicationController 

    def index 
     # No rendering here 
    end 

end 

正如我嘗試添加一個佈局零,以防止渲染所有操作的代碼所示,但似乎沒有不影響行爲的行爲。

+2

這不是'after_action'的用處。整個觀點是它可以訪問呈現的響應。如果你想寫一個自定義的渲染方法,有[更好的方法](http://beerlington.com/blog/2011/07/25/building-a-csv-renderer-in-rails-3/)。如果您可以告訴我們更多關於您的實際問題的信息,我們可能會提供一個更好的解決方案,而不是等同於'$ this-> autoRender = false',它不存在。 – meagar 2014-10-02 01:33:56

+0

我想創建一個主題切換器,ApplicationController從數據庫中選擇用戶選擇的主題,並呈現相應的模板。 – bukk530 2014-10-02 01:44:52

+0

似乎你想要路由到'ThemesController'的'random'動作,然後......?如果ApplicationController執行所有渲染,那麼在動作內部應該做些什麼? – meagar 2014-10-02 01:46:00

回答

0

禁用渲染(以及無返回)問題。

def index 
    render :nothing 
end 

但是,做任何事情都爲時已晚,因爲它會以空實體的形式返回響應。

要禁用佈局:

def index 
    render layout: false 
end 

這會使您查看沒有佈局,問題(render layout: 'my_custom_layout')呈現默認視圖,但不同的佈局。

我們不知道你想要什麼,但最簡單的辦法就是渲染特定視圖,網絡連接:

def index 
    render 'my_custom_file.' 
end 

實際上有很多選擇:http://guides.rubyonrails.org/layouts_and_rendering.html#using-render

編輯 - 如在評論中請求

class ApplicationController < ActionController::Base 
    before_action :set_user_template 

    # ... 

    def set_user_template 
    template_name = current_user.template_name 
    self.class.layout "#{template_name}/application" 
    end 
end