使用if的空值表达ruby

时间:2015-10-23 11:52:54

标签: ruby

我有这段代码:

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,所以我的问题是:为什么这不起作用?我错过了什么?

2 个答案:

答案 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子句,因此可能不会发生任何分配,heromethod都将{{1} }}

答案 1 :(得分:0)

你需要告诉ruby如果英雄是零,将会发生什么,所以重写你的代码

 @_logged_user =  hero.nil? ?  false : { hero: hero, method: method }