【问题标题】:Ruby on Rails: undefined method, checking boolean if true statementRuby on Rails:未定义的方法,如果为 true 则检查布尔值
【发布时间】:2013-09-15 01:36:52
【问题描述】:

我有一个页面,我正在检查数据库列public 是否为真或用户是否为管理员。

<% if @user.public || current_user.admin %>
  ... users page ...
<% end %>

现在的问题是,如果我没有登录,那么它会检查 current_user.admin 是否为真,所以我得到一个 NoMethodError

nil:NilClass 的未定义方法 `admin'

什么是最合乎逻辑的语法,所以如果我没有登录,我可以检查它是公共的还是管理员的,所以它应该指向一个注意到的页面而不是出现这个错误。

谢谢

【问题讨论】:

  • 为什么会有@user 变量和current_user 变量?这似乎是多余的......
  • @GavinMiller 因为用户可以是已登录的current_user,也可以是未登录的用户@user

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 ruby-on-rails-3.1 syntax-error


【解决方案1】:

在检查admin是否为admin之前,您需要检查current user是否设置

if @user.public || (current_user && current_user.admin)

更新答案

Ruby 2.3.0 introduced the Safe Navigation operator (&amp;.).

这让代码更漂亮:

if @user.public || current_user&.admin

【讨论】:

  • 假设 current_user 来自身份验证 gem,添加 current_user = &lt;code_to_find_user&gt; || User.new 就不需要额外的条件。
  • current_user&amp;.admin
  • @maguri: Ruby 2.3 在被问到这个问题时还没有发布,但是已经为新手更新了答案:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2016-12-15
  • 2019-10-31
  • 2018-07-06
相关资源
最近更新 更多