在Rails中嵌套资源时的不同视图

问题描述:

我正在使用Rails 3.2.1。在Rails中嵌套资源时的不同视图

使用嵌套资源时可以使用不同视图吗?即简介/评论帖子/评论。假设您希望这两个页面看起来完全不同。有没有一种方法可以在不重写每个控制器操作中的渲染的情况下执行此操作?

最好我仍然想使用respond_with。

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

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关于多态关联派生而来的。

希望这可以帮助别人。

我有同样的问题,我所做的就是第一次分裂的控制器,如:

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

,然后我为每个嵌套控制器独立的视图。当您运行rails generate controller Profile_Comments new create index时,您会在正确的目录中获得相应的视图和助手(或者您当然可以创建它们并手动将它们放在那里),这些视图默认情况下会呈现。