RubyonRails怎么呈现布局?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

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

def admin_layout
  if current_user.is_able_to('siteadmin')
    render :layout => 'admin'
  else
    render :layout => 'application'
  end
end

在控制器中,它可能是我所放置的那一个或另一个

before_filter :admin_layout

但是会出错

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实际上会尝试渲染内容; 当你想要做的就是设置布局时,你不应该调用它。

Rails有一个适用于所有这些的模式。只需传递一个符号layout,就会调用具有该名称的方法来确定当前布局:

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

用户回答回答于

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

def admin_layout
  if current_user and current_user.is_able_to 'siteadmin'
    render :layout => 'admin'
  else
    render :layout => 'application'
  end
end

扫码关注云+社区