私のほとんどのアプリケーションでは、current_user
メソッドがあります。 のような例外を回避するために、current_user
がnil
の場合、レールはtry
メソッドを提供します。これの問題は、current_user
がnil
の可能性があるところでtry
を使用することを覚えておく必要があることです。Rails:Nullオブジェクトパターンでtryを置き換える
この追加のオーバーヘッドを削除するには、Nullオブジェクトパターンを使用します。
current_user.try(:first_name) #=> nil
current_user.first_name #=> nil
が、さらなるチェーンで失敗します:
class NullUser
def method_missing(method_name, *args)
self.class.new
end
end
current_user.try { |u| u.profiles.first.name } #=> nil
current_user.profiles.first.name #=> nil
:私はnullオブジェクトを返すようにしようとした
current_user.profiles.first.name #=> undefined method...
これは、いくつかのケースでtry
を置き換えることができます
class NullUser
def method_missing(method_name, *args)
nil
end
end
def current_user
return NullUser.new unless UserSession.find
@current_user ||= UserSession.find.user
end
が、これは他のケースでは失敗します:
current_user.is_admin? #=> #<NullUser:0x96f4e98>
は、この問題に対する可能な解決策はあるのか、我々はすべてのtry
で生きているのですか?
を理解することはできません。なぜそれは正しく分割されていないのですか? – apneadiving