2010-07-30 27 views
18

Myślę, że kod jest bardziej wyraźnyRender akcji kontrolera z innego kontrolera

opcja A

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

opcja B

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

jest możliwe w kolumnie (B), aby załadować kolejne działania w innym kontroler? (a nie tylko widok) Jak? Dzięki

+0

Dlaczego chcesz to zrobić? Może być lepiej, jeśli powiesz nam podstawowy problem, który próbujesz rozwiązać. –

+0

"Podstawowym problemem" jest to, że chcę mieć swobodę konfigurowania dowolnych adresów URL bez dotykania routes.rb – user142913

+3

Dla wyjaśnienia, opcja A nie renderuje akcji z innego kontrolera, odpowiada na bieżące żądanie za pomocą przekierowanie, które kieruje przeglądarkę do innego kontrolera (dlatego powoduje to drugie żądanie, które trafia do drugiego kontrolera). 'render: template => 'posts/show'' jednak renderuje szablon innego kontrolera bezpośrednio. Oczywiście musisz ustawić rzeczy dla szablonu do wyświetlenia (jak twój @post var). Nie jestem pewien, czy rozumiem, co próbujesz zrobić, ale zazwyczaj nie możesz skonfigurować adresów URL bez dotykania routes.rb, ponieważ to jest to, do czego służy routes.rb. – Zargony

Odpowiedz

35

Hi spróbować render 'posts/show' lub render :template => 'posts/show'

+0

Dzięki to działa na dwa sposoby, ale nie jest bardzo czysty, ponieważ musiałem dodać @post .. @post = Post.find 1 render 'posts/show' – user142913

+0

render_component powinien załatwić sprawę, ale jest przestarzały – user142913

+0

działa, ale nie renderuje szablonu innego kontrolera wokół szablonu akcji. Czy istnieje sposób, aby to zmusić? – elsurudo

0

Podobnie czynią szablonowi

def index 
    render 'posts/show' 
end 

Ten działa również

def index 
    render template: 'posts/show' 
end 

Jeśli chcesz uczynić w jakiś inny układ

def index 
    render template: 'posts/show', layout: 'different_layout' 
end 
Powiązane problemy