我是否始终需要在此添加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
答案 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
如果用户为零,则会打印'',我会选择第二个