假设我们有标准的Post&评论模型,其中帖子设置为accepts_nested_attributes_for :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'
但是,我需要能够在Comment(例如,来自其before_save或验证函数)之间区分
不幸的是,仅仅从Comment中调用self.post
不起作用,因为在上面,它会在保存发生之前返回nil。在回调当然,我不(也不应该)访问@post,只能访问相关评论的自我。
那么:从嵌套关联模型的角度来看,如何访问新记录的嵌套关联的父模型?
(FWIW,我正在使用它的实际样本允许人们创建一个裸的“评论”,然后如果还没有一个,则会自动创建一个“帖子”来包含它。我简化了这个例子所以它不是以不相关的方式特定于我的代码。)
答案 0 :(得分:6)
我认为Rails不允许你这样做很奇怪。它还会影响子模型中的验证。
在Rails错误跟踪器中有一个很多讨论且没有解决方案的票证:
提议的决议:
基本上,交易是,嵌套属性代码不会在子记录中设置父关联。
在我链接的第二张票中提到了一些解决方法。
答案 1 :(得分:0)
我认为你不能这样做。另一方面,您的验证不应该失败,因为交易的顺序将在保存评论之前创建帖子记录。