2010-07-30 61 views
18

Tôi nghĩ rằng mã này là rõ ràng hơnRender controller action từ controller khác

tùy chọn A

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

tùy chọn B

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

là có thể trong (B) để tải một hành động trong một bộ điều khiển? (và không chỉ xem) Làm thế nào? Cảm ơn

+0

Tại sao bạn muốn thực hiện việc này? Nó có thể tốt hơn nếu bạn cho chúng tôi biết vấn đề cơ bản mà bạn đang cố gắng giải quyết. –

+0

"Vấn đề cơ bản" là tôi muốn được tự do thiết lập một số url như tôi muốn mà không cần chạm vào routes.rb – user142913

+3

Chỉ cần làm rõ, Tùy chọn A của bạn không hiển thị hành động từ bộ điều khiển khác, nó trả lời yêu cầu hiện tại với chuyển hướng trỏ trình duyệt đến bộ điều khiển khác (do đó dẫn đến yêu cầu thứ hai truy cập bộ điều khiển khác). 'render: template => 'posts/show'´ tuy nhiên thực sự hiển thị trực tiếp mẫu của bộ điều khiển khác. Tất nhiên bạn cần thiết lập nội dung cho mẫu để hiển thị (như @post var) của bạn. Tôi không chắc chắn nếu tôi hiểu những gì bạn đang cố gắng để làm, nhưng thông thường bạn không thể thiết lập url mà không cần chạm vào routes.rb, vì đó là những gì routes.rb là tốt cho. – Zargony

Trả lời

35

Hi thử render 'posts/show' hay render :template => 'posts/show'

+0

Cảm ơn nó hoạt động trong cả hai cách nhưng nó không phải là rất sạch vì tôi đã phải thêm @post .. @post = Post.find 1 làm 'bài đăng/hiển thị' – user142913

+0

render_component nên thực hiện thủ thuật nhưng nó đã lỗi thời – user142913

+0

hoạt động, nhưng không hiển thị mẫu của trình điều khiển khác xung quanh mẫu hành động. Có cách nào để ép buộc điều đó không? – elsurudo

0

Chỉ cần làm cho mẫu

def index 
    render 'posts/show' 
end 

Cái này cũng làm việc

def index 
    render template: 'posts/show' 
end 

Nếu bạn muốn làm trong một số cách bố trí khác

def index 
    render template: 'posts/show', layout: 'different_layout' 
end 
Các vấn đề liên quan