如果用户已登录,请设置其他Rails模板

时间:2010-12-21 22:12:11

标签: ruby-on-rails templates layout

我正在尝试在用户登录时将布局设置为“私有”。如果我可以执行以下操作,那将是完美的:

layout 'private' if current_user

除非出现此错误:

undefined local variable or method `current_user' for ApplicationController:Class

我也尝试在应用程序控制器中执行此操作:

before_filter :pick_the_layout

def pick_the_layout
  if current_user
    render :layout => "private"
  else
    render :layout => "public"
  end
end

也没有运气,这是有道理的。谁能想到更好的方法呢?

2 个答案:

答案 0 :(得分:12)

你可以这样做:

layout :determine_layout

private
  def determine_layout
    current_user ? "private" : "public"
  end

显然,如果用户未登录,这取决于current_user nilfalse

您可以在此处查看有关layout用法的文档:

http://api.rubyonrails.org/classes/AbstractController/Layouts/ClassMethods.html#method-i-layout

这里有更多例子:

http://api.rubyonrails.org/classes/AbstractController/Layouts.html

答案 1 :(得分:0)

嗯...也许吧 layout 'private' if defined?(current_user)