Ruby on rails 检查会话
在我的Rails应用程序中,如果用户试图创建一个新帐户,并且已经有一个会话正在进行(即已登录),我希望显示一条消息,显示“看起来您已经有一个帐户” 为此,我尝试使用以下代码检查当前会话:Ruby on rails 检查会话,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在我的Rails应用程序中,如果用户试图创建一个新帐户,并且已经有一个会话正在进行(即已登录),我希望显示一条消息,显示“看起来您已经有一个帐户” 为此,我尝试使用以下代码检查当前会话: <% if session[:user_id]? %> <div id="error_expanation">Seems like you already have an account with us. <% link_to "Sign in now", login %>
<% 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 %>
我很确定是“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
class sessioncontroller“无效的用户名/密码组合”
结束
结束
def销毁
会话[:用户\u id]=无
重定向到管理员url,注意=>“您已成功注销。”
结束
结束
我强烈建议您使用类似设备的登录逻辑,因为它比您自己的任何代码都更安全。然后你可以做一些类似的事情:
我建议更改这一行:
<% if session[:user_id]? %>
到
这应该可以解决问题。更干净的解决方案是向应用程序控制器添加函数调用,如下所示:
class ApplicationController
def user_is_logged_in?
!!session[:user_id]
end
end
类应用程序控制器
def用户是否已登录?
!!会话[:用户标识]
结束
结束
然后您可以执行以下操作:
<% if user_is_logged_in? %>
请尝试完美的解决方案,谢谢。仍在努力掌握Ruby语法,并在适当的时候使用问号之类的东西。函数调用结束时的问号始终是函数定义的一部分,它们只是表示函数结果为布尔值(true或false)的约定。很高兴我能帮上忙。只是想补充一下JSCHOR的评论——设计: class ApplicationController def user_is_logged_in? !!session[:user_id] end end <% if user_is_logged_in? %>