0

我总是需要添加if @user这个吗?

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

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

没有任何聪明的方法来解决这种“零”错误吗?我只想在删除用户时显示“[未找到用户]”。

查看/posts/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
4

3 回答 3

2

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

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

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

所以你可以这样做:

@user.try(:nickname)
于 2013-01-23T00:31:06.703 回答
1

你可以这样写你的助手:

def display_nickname(user)
    user.try(:nickname) || "[Not Found User]"
end
于 2013-01-23T00:29:01.657 回答
1

关于什么

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

或者

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

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

于 2013-01-23T02:25:16.490 回答