用例:
考虑以下示例。
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"%>
当前解决方案:
为了克服这个问题,我使用了空对象设计模式。User 类定义了一个 NullUser 对象(其名称将设置为“未设置”)。如果 foo 对象没有用户对象,它将返回一个 NullUser 对象。我已经覆盖了执行 nil 检查的 Foo 类中的用户方法。
问题:
- 有没有更好的解决方案?
- 是否有一个 gem 可以促进 Rails 活动记录模型的空对象模式。