'if'运算符返回错误,如果答案为'nil'

时间:2015-10-08 23:14:22

标签: ruby-on-rails ruby

我有一个if语句:

SQL

在查看某个页面时检查他人的角色。如果它们不是这些东西,请跳过它。 (<% if current_user.moderator? || user_is_authorized_for_topics? %> 在单独的控制器中定义。)

当我添加其他角色时,我注意到,如果我没有登录(所以没有角色),我收到错误:

user_is_authorized
我明白了;如果我在没有角色的用户上运行undefined method `moderator?' for nil:NilClass (在这种情况下也是来宾?),它将返回moderator?

简而言之:问题(我认为)是因为它报告nil而不是niltrue。但是,除了false以外的任何内容,它为什么不跳过这个if语句?我知道true不是nil,但它也不是false

希望有人可以告诉我原因,那么也许我可以找出解决方法,或者有人可以直接帮助我解决错误? true只调用枚举(管理员,成员,主持人)。

2 个答案:

答案 0 :(得分:2)

没有current_user时会出现错误。函数current_user返回Nil,你问Nil是否是一个主持人。错误消息表示您不能这样做。

还不清楚是什么提供了方法“user_is_authorized_for_topics?”。它可能应该是User对象,但你不是那样调用它 - 而是你正在调用一个全局方法或一个帮助器。所以在我的回答中,我将假设此方法位于User对象所在的位置。

相反,你可能想要这样的东西,它会先检查你是否有current_user:

<% if current_user and current_user.moderator? || current_user.is_authorized_for_topics? %>

请注意,我故意将“和”(低优先级)与“||”混合(更高的优先权)。这不是一种符合每个人口味的风格,但我喜欢它。

答案 1 :(得分:1)

只需将其更改为此,这将确保首先有一个用户:

<% if current_user && (current_user.moderator? || user_is_authorized_for_topics?) %>