如何在覆盖的 getter 上调用构建?

How to call build on an overwritten getter?

我在我的一个模型中为 has_many 关系覆盖了 getter。这个用例是它构建 'fake'(非持久化)对象,这些对象是计划任务,纯粹是为了在日历上显示它们。例如,任务 A 是一个持久记录,并且有一个它未来发生的列表。此关系的 getter 将获取原始对象,并从未来时间列表中构建任务的任何重复实例,一次返回所有实例。

因为覆盖 getter returns 数组而不是关系,所以我无法以 simple_form 形式在此 getter 上调用 .build。例如。

instance_of_model.overwritten_getter.build

会失败,因为您不能在数组上调用 .build。

有没有办法以允许这样做的方式写入覆盖的 getter?如果没有,是否有用于执行此类操作的首选设计模式?

我最终通过在已覆盖 getter 的模型上调用 .new 并在表单声明中明确提供父 ID 来解决此问题。

而不是form_for (@user.tasks.build)

变成了form_for (Task.new(user: @user))