我在我的 Rails 应用程序中使用Null Object模式来实现来宾用户帐户的概念。
像许多应用程序一样,我有一个方法ApplicationController
调用current_user
.
在未登录用户的情况下,我想使用我的来宾用户空对象。
它在许多情况下都有效,但随后会遇到以下情况 -
params.merge({ user: current_user })
MyModel.new(params)
当然,这会失败,但有以下例外。
ActiveRecord::AssociationTypeMismatch: User expected, got GuestUser
我的问题是,有什么方法可以优雅地处理这种情况。Null Object 模式的想法是,您可以透明地交换此 null 对象,并使其本质上是真实对象的鸭子类型。
很明显,如何为对象上调用的方法执行此操作,但在这种情况下,我希望能够将其传入并基本上将关联列设置为null
,而不是需要一大堆自定义逻辑(避免无论如何都是空对象模式的重点)。
多态关系并不完全是这样。