使用事例:
次の例を考えてみましょう。
Class Foo < ActiveRecord::Base
belongs_to :user
attr_accessible :title
end
Class User < ActiveRecord::Base
has_many :foo
attr_accessible :name
end
ログインしたユーザーが Foo を作成すると、そのユーザー レコードに関連付けられます。ログインしていないユーザーが作成した Foo は、どのユーザーにも関連付けられません。これは単なる例であり、私のアプリケーションには多くの同様の使用例があります。
問題:
問題は、私のビュー コードが多数の if 条件や次のような三項演算で乱雑になることです。
<% foo.user ? foo.user.name : "not set"%>
現在の解決策:
これを克服するために、null オブジェクト デザイン パターンを使用しています。User クラスは NullUser オブジェクトを定義します (その名前は「未設定」に設定されます)。foo オブジェクトにユーザー オブジェクトがない場合、NullUser オブジェクトが返されます。nil チェックを行う Foo クラスのユーザー メソッドをオーバーライドしました。
質問:
- これに対するより良い解決策はありますか?
- Rails アクティブ レコード モデルの null オブジェクト パターンを容易にする gem はありますか。