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

Nat*_*han 0 layout templates ruby-on-rails

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

layout 'private' if current_user
Run Code Online (Sandbox Code Playgroud)

除了它给出了这个错误:

undefined local variable or method `current_user' for ApplicationController:Class
Run Code Online (Sandbox Code Playgroud)

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

before_filter :pick_the_layout

def pick_the_layout
  if current_user
    render :layout => "private"
  else
    render :layout => "public"
  end
end
Run Code Online (Sandbox Code Playgroud)

这也没有运气,这是有道理的.谁能想到更好的方法来做到这一点?

don*_*ngg 13

你可以这样做:

layout :determine_layout

private
  def determine_layout
    current_user ? "private" : "public"
  end
Run Code Online (Sandbox Code Playgroud)

显然,这取决于current_usernil或者false如果用户没有登录.

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

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

这里有更多例子:

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