我有这段代码:
def load_logged_user
hero, method = if session[:hero]
return Hero.find_by(id: session[:hero]), :session
elsif cookies.permanent.signed[:token]
return hero_from_cookie, :cookie
end
@_logged_user = { hero: hero, method: method } if hero
end
我在if的void value expression
行遇到end
错误。我从文档中了解到ruby中的所有东西都被视为lambdas,所以我的问题是:为什么这不起作用?我错过了什么?
答案 0 :(得分:3)
从代码中删除return
:
def load_logged_user
hero, method = if session[:hero]
[Hero.find_by(id: session[:hero]), :session]
elsif cookies.permanent.signed[:token]
[hero_from_cookie, :cookie]
end
@_logged_user = { hero: hero, method: method } if hero
end
使用return
从函数中获取代码,这可能不是您想要做的。
请注意,由于您的代码中没有else
子句,因此可能不会发生任何分配,hero
和method
都将{{1} }}
答案 1 :(得分:0)
你需要告诉ruby如果英雄是零,将会发生什么,所以重写你的代码
@_logged_user = hero.nil? ? false : { hero: hero, method: method }