在我的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]?'这导致了问题,因为如果我用另一个if语句替换它,它就可以工作。
有什么想法我需要修理来检查这个吗?谢谢!
哦,如果需要的话,这是我的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
答案 0 :(得分:7)
我建议改变这一行:
<% if session[:user_id]? %>
到
<% if session[:user_id] %>
那应该解决问题。更干净的解决方案是向应用程序控制器添加一个函数调用,如下所示:
class ApplicationController def user_is_logged_in? !!session[:user_id] end end
然后你可以做到以下几点:
<% if user_is_logged_in? %>
答案 1 :(得分:1)
尝试<% if session[:user_id] != nil %>
答案 2 :(得分:0)
我强烈建议您使用类似设备的登录逻辑,因为它比任何自己动手的代码更安全。然后你可以做类似的事情:<%= dowhatever if user_signed_in? %>