检查会话
问题描述:
在我的Rails应用程序中,如果用户正在尝试创建新帐户,并且已经有一个会话正在进行(即已登录),我想要显示一条消息,指出“它看起来像你已经有一个账户”。检查会话
要做到这一点,我想检查与下面的代码当前会话:
<% if session[:user_id]? %>
<div id="error_expanation">Seems like you already have an account with us.
<% link_to "Sign in now", login %></div>
<% end %>
然而,该代码产生以下错误:
compile error
/path/to/app/views/users/_form.html.erb:17: syntax error, unexpected ';'
');@output_buffer.safe_concat(' ...
^
/path/to/app/views/users/_form.html.erb:42: syntax error, unexpected kENSURE, expecting $end
我很确定'session [:user_id]?''这是造成这个问题的原因,因为如果我用另一个语句替换它,它就会起作用。
任何想法,我需要修复以检查这个?谢谢!
哦,这是我的sessions_controller.rb如果需要这种耐心:
class SessionsController < ApplicationController
def edit
session[:return_to] = request.referer
end
def new
end
def create
if user = User.authenticate(params[:email], params[:password])
session[:user_id] = user.id
session[:user_name] = user.name
redirect_to admin_url
else
redirect_to login_url, :alert => "Invalid username/password combination"
end
end
def destroy
session[:user_id] = nil
redirect_to admin_url, notice => "You've successfully logged out."
end
end
答
我建议修改这一行:
<% if session[:user_id]? %>
到
<% if session[:user_id] %>
这应该解决这个问题。清洁的解决方案是一个函数调用添加到应用程序控制器是这样的:
然后,你可以做到以下几点:
<% if user_is_logged_in? %>
答
我会强烈建议你使用类似设备进行登录的逻辑,因为它会比更安全的任何滚你的 - 自己的代码。然后,你可以这样做:<%= dowhatever if user_signed_in? %>
+1
只需添加到jschorr的评论 - 设计:https://github.com/plataformatec/devise – jakeed1 2014-03-10 17:41:06
答
尝试<% if session[:user_id] != nil %>
完美的解决方案,谢谢。仍试图获得Ruby语法的掌握,以及使用诸如问号之类的东西的适当时间。 – rottendevice 2011-02-03 02:52:56