如果我使用关联创建对象:
post.comments.create 'blah'
在对象创建过程中有没有办法访问父实例?
class Comment < ActiveRecord::Base
def before_save
# do something with @post
end
end
我在保存之前发现父实例是nil,而在保存之后不是同一个实例。
答案 0 :(得分:0)
你不能简单地访问before_save块中的'post_id'属性吗?或者,如果在comment.rb模型中定义'belongs_to:post'关联,则应该能够在before_save方法中访问'self.post'。请试一试
答案 1 :(得分:0)
使用post.comments.new
将确保分配关联ID而不保存新评论。因此before_save
应该能够在保存时访问父(comment.post
)。即分为两个阶段保存:
comment = posts.comments.new
...
comment.save!
如果你想要一个单行创建,你当然可以将它包装在父(Post)上的单个创建函数中。
(也有可能更近期的Rails实际上适用于问题中提出的场景,即只是一个简单的post.comments.create
,但我还没有经过测试。)