2010-07-30 195 views
18

我認爲代碼是更明確的從另一個控制器渲染控制器動作

選項甲

class RedirectController < ApplicationController 
    def index 
    redirect_to :controller => 'posts', :action => 'show', :id => 1 
    # it works 
    end 
end 

選擇B

class RedirectController < ApplicationController 
    def index 
    render :controller => 'posts', :action => 'show', :id => 1 
    # it doesn't work 
    end 
end 

是可能的(B)加載在另一個另一個動作控制器? (而不僅僅是視圖)如何? 感謝

+0

你爲什麼要這麼做?如果你告訴我們你正在努力解決的根本問題可能會更好。 – 2010-07-30 09:38:51

+0

「根本問題」是我想要自由地設置一些網址,只要我不想觸摸routes.rb – user142913 2010-07-30 16:50:50

+3

只是爲了澄清,您的選項A不會呈現來自另一個控制器的操作,它會以當前的請求將瀏覽器指向另一個控制器的重定向(因此會導致第二個請求觸發另一個控制器)。 'render:template =>'posts/show'然而直接呈現另一個控制器的模板。當然你需要設置模板顯示的東西(比如你的@post var)。 我不知道我是否明白你想做什麼,但通常你不能設置url而不觸及routes.rb,因爲這就是routes.rb的好處。 – Zargony 2010-08-02 14:43:40

回答

35

嗨嘗試render 'posts/show'render :template => 'posts/show'

+0

感謝它在兩種方式,但它不是很乾淨,因爲我不得不添加@post .. @post = Post.find 1 render'posts/show' – user142913 2010-07-30 16:47:39

+0

render_component應該做的伎倆,但它已過時 – user142913 2010-08-29 22:34:42

+0

這工作,但不會渲染操作模板周圍的其他控制器模板。有沒有辦法強制呢? – elsurudo 2013-01-07 15:59:24

0

就呈現模板

def index 
    render 'posts/show' 
end 

這其中也適用

def index 
    render template: 'posts/show' 
end 

如果你想在其他一些佈局呈現

def index 
    render template: 'posts/show', layout: 'different_layout' 
end