2012-03-22 19 views
2

我正在使用Rails 3.2.1。在Rails中嵌套資源時的不同視圖

使用嵌套資源時可以使用不同視圖嗎?即簡介/評論帖子/評論。假設您希望這兩個頁面看起來完全不同。有沒有一種方法可以在不重寫每個控制器操作中的渲染的情況下執行此操作?

最好我仍然想使用respond_with。

回答

2

我沒有找到任何東西,我到底做了以下方式:

class NestedController < ApplicationController 

    before_filter :retrieve_parent 
    before_filter :retrieve_scope 

    layout :retrieve_layout 

    def retrieve_scope 
    @scope = @parent.nil? ? controller_name : @parent.class.name.pluralize.downcase || '' 
    end 

    def retrieve_view 
    controller_name + '/' + @scope + '/' + action_name 
    end 

    def retrieve_parent 
    params.each do |name, value| 
     if name =~ /(.+)_id$/ 
     @parent = $1.classify.constantize.find(value) 
     end 
    end 
    end 

    def retrieve_layout 
    template_exists?(@scope, 'layouts') ? @scope : 'application' 
    end 

end 

使用嵌套資源的每個控制器,將擴大從NestedController。

請注意,retrieve_parent函數是從Ryan的railscast關於多態關聯派生而來的。

希望這可以幫助別人。

0

我有同樣的問題,我所做的就是第一次分裂的控制器,如:

https://stackoverflow.com/a/14947230/1641163

,然後我爲每個嵌套控制器獨立的視圖。當您運行rails generate controller Profile_Comments new create index時,您會在正確的目錄中獲得相應的視圖和助手(或者您當然可以創建它們並手動將它們放在那裏),這些視圖默認情況下會呈現。