我有一个if语句:
SQL
在查看某个页面时检查他人的角色。如果它们不是这些东西,请跳过它。 (<% if current_user.moderator? || user_is_authorized_for_topics? %>
在单独的控制器中定义。)
当我添加其他角色时,我注意到,如果我没有登录(所以没有角色),我收到错误:
user_is_authorized
我明白了;如果我在没有角色的用户上运行undefined method `moderator?' for nil:NilClass
(在这种情况下也是来宾?),它将返回moderator?
。
简而言之:问题(我认为)是因为它报告nil
而不是nil
或true
。但是,除了false
以外的任何内容,它为什么不跳过这个if
语句?我知道true
不是nil
,但它也不是false
。
希望有人可以告诉我原因,那么也许我可以找出解决方法,或者有人可以直接帮助我解决错误? true
只调用枚举(管理员,成员,主持人)。
答案 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?) %>