ruby-on-rails 资源的单个视图上的不同布局和路线

hgncfbus  于 9个月前  发布在  Ruby
关注(0)|答案(3)|浏览(101)

我是Rails新手,有一个关于CMS中布局和路由的问题。我在网上搜索后没有找到这个问题的答案,所以我希望这里有人能帮助我。
我正在建立一个CMS,并有布局,* 应用程序。html。erb*(默认)这是前面的公共页面和 admin.html.erb 这是登录后可用。
我有一个名为 Post 的资源。有没有可能只有show视图使用默认布局,而其他视图使用管理布局?
换句话说,我希望单个帖子的URL像“myAppDomain/posts/1”一样,并使用默认布局
虽然管理视图应该具有 /admin 作为前缀并使用admin布局,
例如“myAppDomain/admin/posts”,“myAppDomain/admin/posts/1/edit”
现在我已经设置了一个路由,将/admin“添加”到posts的URL中

scope "/admin" do
   resources :posts
end

字符串
在PostsController中,我指定使用admin布局

class PostsController < ApplicationController
   before_filter :authorize , :except => [:show]
   layout 'admin'
   ...


所以现在人们可以在不登录的情况下阅读文章,但是在我的欢迎页面上,指向单个文章视图的链接被呈现为“myAppDomain/admin/posts/1”,并且它使用了admin布局

<%= link_to post.title, post %>


有没有一种方法可以在资源的单个视图上使用不同的布局和路线,或者我应该采用不同的方法?

eyh26e7m

eyh26e7m1#

只需在操作中指定布局

def show
    render :layout => 'application'    
end

字符串

xa9qqrwz

xa9qqrwz2#

您可以执行before_action

private

def layout_set
  if current_user.admin?
    layout 'admin'
  else
    layout 'default'
  end
end

字符串
在控制器的顶部:

before_action :layout_set


现在你可以忘记添加布局了。你可以更进一步,把before动作放在你的应用程序控制器中,你可以通过添加相同的before_action在你所有的控制器中添加该功能。这样你可以保存很多额外的代码。

ogq8wdun

ogq8wdun3#

我来到这里寻找如何在所有没有布局.如果有人在这之后,使用render layout: false

class YourController < ApplicationController
  def your_action
    # your code here

    render layout: false
  end
end

字符串

相关问题