在 Rails 中嵌套资源时的不同视图
Posted
技术标签:
【中文标题】在 Rails 中嵌套资源时的不同视图【英文标题】:Different views when nesting resources in Rails 【发布时间】:2012-03-22 16:11:52 【问题描述】:我正在使用 Rails 3.2.1。
在使用嵌套资源时是否可以使用不同的视图?即profile/cmets post/cmets。假设您希望两个页面看起来完全不同。有没有办法做到这一点,而无需在每个控制器操作中覆盖渲染?
最好还是想用respond_with。
【问题讨论】:
【参考方案1】:我没有找到任何东西,最后我是通过以下方式完成的:
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。
希望这对某人有所帮助。
【讨论】:
【参考方案2】:我遇到了同样的问题,我所做的就是首先拆分控制器,如下所示:
https://***.com/a/14947230/1641163
然后我为每个嵌套控制器提供了一个单独的视图。当您运行rails generate controller Profile_Comments new create index
时,您会在正确的目录中获得相应的视图和帮助程序(或者您当然可以直接创建它们并手动将它们放在那里),这些是默认情况下将呈现的视图。
【讨论】:
以上是关于在 Rails 中嵌套资源时的不同视图的主要内容,如果未能解决你的问题,请参考以下文章