Ruby on rails Rails:如何访问新记录的父模型&x27;什么是嵌套关联?
假设我们有标准的Post&Comment模型,Post具有Ruby on rails Rails:如何访问新记录的父模型&x27;什么是嵌套关联?,ruby-on-rails,associations,callback,Ruby On Rails,Associations,Callback,假设我们有标准的Post&Comment模型,Post具有接受\u嵌套的属性\u用于:commments和:autosave=>true集 我们可以创建一个新帖子,同时添加一些新评论,例如: @post = Post.new :subject => 'foo' @post.comments.build :text => 'bar' @post.comments.first # returns the new comment 'bar' @post.comments.first.pos
接受\u嵌套的属性\u用于:commments
和:autosave=>true
集
我们可以创建一个新帖子,同时添加一些新评论,例如:
@post = Post.new :subject => 'foo'
@post.comments.build :text => 'bar'
@post.comments.first # returns the new comment 'bar'
@post.comments.first.post # returns nil :(
@post.save # saves both post and comments simultaneously, in a transaction etc
@post.comments.first # returns the comment 'bar'
@post.comments.first.post # returns the post 'foo'
但是,我需要能够区分注释内(例如,它的before_save或validation函数)和
self.post
是不起作用的,因为根据上面的说明,它在保存之前返回nil。当然,在一次回调中,我并没有(也不应该)访问@post,只能访问相关评论的self
因此:如何从嵌套关联模型的角度访问新记录的嵌套关联的父模型
(FWIW,我正在使用的实际示例允许人们创建一个裸体的“评论”,然后如果还没有,会自动创建一个“帖子”来包含它。我已经简化了这个示例,因此它不是以不相关的方式特定于我的代码。)我认为您无法做到这一点。另一方面,您的验证不应该失败,因为事务的顺序将在保存注释之前创建post记录。我认为奇怪的是Rails不允许您这样做。它还影响子模型中的验证 在Rails bug跟踪器中有一个关于此问题的讨论很多但没有解决方案的问题: 和一项拟议决议: 基本上,处理方法是,嵌套属性代码不会在子记录中设置父关联
我链接到的第二张罚单中提到了一些解决办法。它将如何做到这一点?您不想设置parent_id列,因此必须在子项上添加一些隐藏属性?您可以设置属性(例如parent、children),而无需设置必要的_id。这就是它目前保存嵌套模型的方式-它只是有一个不递归的缺陷。@Sai根据发布的链接,我可以看到这可以通过使用选项的
inverse\u来实现。@elquimista自己也试过了,
的inverse\u在这种情况下没有帮助。@lulalalala你能详细说明一下,它对你的情况没有帮助吗?