首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby on Rails -呈现布局

Ruby on Rails -呈现布局
EN

Stack Overflow用户
提问于 2009-07-14 21:14:57
回答 5查看 29.3K关注 0票数 19

我正在尝试将一个网站分成两个部分。一个应该使用应用程序布局,另一个应该使用管理布局。在application.rb中,我创建了一个函数,如下所示:

代码语言:javascript
复制
def admin_layout
  if current_user.is_able_to('siteadmin')
    render :layout => 'admin'
  else
    render :layout => 'application'
  end
end

在控制器中,可能是其中之一,我将

代码语言:javascript
复制
before_filter :admin_layout

这对于某些页面(只是文本)很有效,但对于其他页面,我会得到经典的错误:

代码语言:javascript
复制
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each

有人知道我错过了什么吗?如何正确使用render和layout?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-14 21:22:45

render方法实际上将尝试呈现内容;当您想要做的只是设置布局时,您不应该调用它。

Rails为这一切提供了一种模式。只需将一个符号传递给layout,就会调用具有该名称的方法来确定当前布局:

代码语言:javascript
复制
class MyController < ApplicationController
  layout :admin_layout

  private

  def admin_layout
    # Check if logged in, because current_user could be nil.
    if logged_in? and current_user.is_able_to('siteadmin')
      "admin"
    else
      "application"
    end
  end
end

See details here

票数 41
EN

Stack Overflow用户

发布于 2009-07-14 21:19:05

也许您需要先检查用户是否已登录?

代码语言:javascript
复制
def admin_layout
  if current_user and current_user.is_able_to 'siteadmin'
    render :layout => 'admin'
  else
    render :layout => 'application'
  end
end
票数 5
EN

Stack Overflow用户

发布于 2009-07-14 21:25:18

这可能是因为当用户未登录时,current_usernil。测试.nil?或初始化对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1128080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档