我是rails的新手,对CMS中的布局和路由有疑问。我在搜索网页后没有遇到过这个问题的答案,所以我希望有人可以帮助我。
我正在构建CMS并且必须布局 application.html.erb (默认),这是前面的公共页面,而 admin.html.erb 是登录后可用。
我有一个名为 Post 的资源。是否有可能只有show视图使用默认布局,而其余视图使用管理布局?
换句话说,我希望网址单个帖子像“myAppDomain / posts / 1”并使用默认布局
管理视图应该有 / admin 作为前缀并使用管理布局,
比如“myAppDomain / admin / posts”,“myAppDomain / admin / posts / 1 / edit”
现在我已经设置了一条路线,将“添加”/ admin添加到帖子网址
scope "/admin" do
resources :posts
end
在PostsController中我指定使用管理布局
class PostsController < ApplicationController
before_filter :authorize , :except => [:show]
layout 'admin'
...
所以现在人们可以在不登录的情况下阅读帖子,但是我欢迎页面上单个帖子视图的链接呈现为“myAppDomain / admin / posts / 1”,并且它使用了管理布局
<%= link_to post.title, post %>
有没有办法在资源的单个视图上使用不同的布局和路由,还是应该采用不同的方法?
答案 0 :(得分:5)
只需在动作中指定布局
即可def show
render :layout => 'application'
end
答案 1 :(得分:1)
你可以做一个before_action
private
def layout_set
if current_user.admin?
layout 'admin'
else
layout 'default'
end
end
在控制器的顶部:
before_action :layout_set
现在你可以忘记添加布局了。您可以更进一步,将之前的操作放在应用程序控制器中,只需添加相同的before_action即可在所有控制器中添加该功能。以这种方式节省了大量额外代码。