0

これを常に追加する必要がありif @userますか?

パターン 1 では存在しないif @userため、ユーザーが削除されたときに 'nil' エラーを返します。

パターン 2 では、「nil」エラーは返されませんが、これをすべての行に追加するのは面倒です:(

この種の「nil」エラーを解決するスマートな方法はありませんか? ユーザーが削除されたときに「[Not Found User]」を表示したいだけです。

ビュー/投稿/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 の「try」メソッドを使用できます。

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)}"
end

また

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

ユーザーがゼロの場合、両方とも「」と出力されます。2番目を選択しました

于 2013-01-23T02:25:16.490 に答える
1

次のようにヘルパーを記述できます。

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