如何处理可选的belongs_to关联
问题描述:
USECASE:如何处理可选的belongs_to关联
请考虑以下示例。
Class Foo < ActiveRecord::Base
belongs_to :user
attr_accessible :title
end
Class User < ActiveRecord::Base
has_many :foo
attr_accessible :name
end
如果登录的用户创建Foo,它将与其用户记录相关联。如果一个未登录的用户创建Foo,它将不会被关联到任何用户。这只是一个例子,我的应用程序中有很多类似的用例。
问题:
问题是我认为的代码获取了很多,如果条件像三元操作混乱,
<% foo.user ? foo.user.name : "not set"%>
目前的解决方案:
为了克服这个问题,我使用空对象设计模式。 User类定义了一个NullUser对象(其名称将被设置为“未设置”)。如果一个foo对象没有用户对象,它将返回一个NullUser对象。我已经重写了Foo类中的用户方法,它没有进行零检查。
问题:
- 是否有更好的解决方案呢?
- 有没有一个宝石,它有助于 轨道活动记录模型的空对象模式。
答
一个可能的解决方案是设置默认值并将其与访客用户相关联。这样当用户在场时它会被覆盖,但意味着当你打电话时,总会有一个值。用户名