我是否总是需要添加'if something'以避免'nil'错误?

时间:2013-01-23 00:24:49

标签: ruby-on-rails ruby-on-rails-3

我是否始终需要在此添加if @user

在模式1中,它没有if @user因此在删除用户时返回“nil”错误。

在模式2中,它不会返回'nil'错误,但是添加这些内容的每一行都太烦人了:(

有没有什么聪明的方法可以解决这种'nil'错误? 我只想在用户被删除时显示“[找不到用户]”。

查看/帖/ show.html.erb

#Pattern 1
<%= display_nickname(@user.nickname) %>

#Pattern 2
<%= display_nickname(@user.nickname) if @user %>

application_helper.rb

def display_nickname(nickname)
    if !nickname.nil?
        return nickname
    end
    "[Not Found User]"
end

3 个答案:

答案 0 :(得分:2)

在许多(但不是全部)情况下,您可以使用ActiveSupport中的“try”方法。

foo = Foo.find(1)
foo.bar.try(:some_method)

在示例中,如果bar为nil,some_method也将返回nil。

所以你可以这样做:

@user.try(:nickname)

答案 1 :(得分:1)

你可以这样写你的助手:

def display_nickname(user)
    user.try(:nickname) || "[Not Found User]"
end

答案 2 :(得分:1)

怎么样

def display_nickname(user)
  "#{user.try(:nickname)}"
end

def display_nickname(user)
  user ? user.nickname : ''
end

如果用户为零,则会打印'',我会选择第二个