把头发拉出来:
我正在尝试一个简单的“重定向到家,如果没有会话电子邮件变量”,当我测试会话变量是nil
时说它不是,那么代码就会在下一个语句中出现抱怨它的nil
。
以下是代码:
def index
if session[:email].nil?
redirect_to root_url
end
@user = User.find(:first, :conditions => "email = '"+session[:email]+"'")
end
所以我在会话不存在且@user
是nil
时运行它,因为db当然没有用户使用nil电子邮件地址。但是,当session[:email]
为nil
时,为什么不重定向呢?顺便说一句,我试过存在吗?并且空白?并且== nil
和== ""
无效
任何帮助将不胜感激。觉得我错过了一些明显的东西。
谢谢,克里斯
答案 0 :(得分:2)
试试redirect_to root_url and return unless session[:email]
。 and return
应该可以解决问题。
正如Alex在评论中所说,redirect_to
(和render
就此而言)只是方法调用,因此不会将控制权返回给调用对象。
答案 1 :(得分:0)
您是否尝试将其拉到单独的变量中?这段代码适用于rails3:
abc = session[:abc]
if !abc.blank?
logger.info "blank"
else
logger.info "not"
end
答案 2 :(得分:0)
你可以尝试类似的东西
def index
@user = User.find(:first, :conditions => "email = '"+session[:email]+"'")
rescue ActiveRecord::RecordNotFound
redirect_to root_url
end
告诉我是否有诀窍。