【发布时间】:2019-01-16 19:40:33
【问题描述】:
我将 mongoid 用于用户是父文档的应用程序,并且几乎所有其他信息都嵌入到用户中。因此,例如,我的控制器 #new 对属于用户的 Relationship 的操作看起来像:
def new
@relationship = current_user.relationships.new(friend_id: params[:fid])
@relationship.validate
end
因为我对将显示在视图中的关系进行验证,并且其中一些验证需要能够引用父级,所以我不能只调用 @relationship = Relationship.new(friend_id: params[:fid]),而是在用户关系中实例化此关系阵列,它现在挂在那里,即使用户决定他们毕竟不想建立新的关系,他们去网站的另一部分。如果他们转到关系索引页面,他们会在列表中看到它,除非我将其过滤掉。
如果关系是有效的,并且他们在其他地方做了一些导致用户保存的事情,那么这个虚拟关系现在就是一个真实的关系。如果无效,则保存将因未知原因而失败。
我打算将许多模型嵌入到用户中,所以每个模型都会遇到这个问题。
我知道我可以致电current_user.reload 来清除垃圾,但每次我想这样做时都必须访问数据库,这让我觉得很可笑。我也可以在验证后孤立关系,但这感觉很糟糕。
在我看来,这是人们在使用嵌入式文档时应该一直遇到的问题,所以我认为会有某种内置解决方案,但我似乎无法在任何地方找到它。我看到this question,和我的差不多,但是我想要一些更可扩展的东西,这样我就不用到处放了。
我即将制作一个模块,为每个嵌入式关系添加一个clear_unsaved_#{relation} 方法到类中,但这个想法让我感到沮丧,所以我想看看是否有人对如何做有更好的想法,以及最好在哪里调用它。
【问题讨论】:
标签: ruby-on-rails mongoid