2

我正在使用 Rails 3.2.1。

使用嵌套资源时是否可以使用不同的视图?即个人资料/评论帖子/评论。假设您希望两个页面看起来完全不同。有没有办法做到这一点,而无需在每个控制器操作中覆盖渲染?

最好我仍然想使用respond_with。

4

2 回答 2

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。

希望这可以帮助某人。

于 2012-03-23T14:18:14.200 回答
1

我有同样的问题,我所做的是首先拆分控制器,如:

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

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

于 2015-02-12T06:01:55.383 回答