Rya*_*nJM 19 layout ruby-on-rails render
我正在尝试将网站分成两部分.一个应该使用应用程序布局,一个应该使用管理布局.在我的application.rb中,我创建了一个函数如下:
def admin_layout
if current_user.is_able_to('siteadmin')
render :layout => 'admin'
else
render :layout => 'application'
end
end
Run Code Online (Sandbox Code Playgroud)
在控制器里,它可能是我放的一个或另一个
before_filter :admin_layout
Run Code Online (Sandbox Code Playgroud)
这适用于某些页面(其中只是文本),但对于其他页面,我得到了经典错误:
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
Run Code Online (Sandbox Code Playgroud)
有没有人知道我错过了什么?我该如何正确使用渲染和布局?
mol*_*olf 40
该方法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
Run Code Online (Sandbox Code Playgroud)
小智 5
也许您需要先检查用户是否已登录?
def admin_layout
if current_user and current_user.is_able_to 'siteadmin'
render :layout => 'admin'
else
render :layout => 'application'
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26430 次 |
最近记录: |