1

如果我使用关联创建一个对象:

post.comments.create 'blah'

有没有办法在对象创建期间访问父实例?

class Comment < ActiveRecord::Base

  def before_save
    # do something with @post
  end

end

我发现父实例在保存之前为零,而在保存后不是同一个实例。

4

2 回答 2

0

您不能简单地访问 before_save 块中的“post_id”属性吗?或者,如果您在 comment.rb 模型中定义了 'belongs_to :post' 关联,您应该也可以在 before_save 方法中访问 'self.post'。请试一试

于 2012-04-30T10:27:25.613 回答
0

使用post.comments.new将确保在不保存新评论的情况下分配关联 ID。所以当你保存它时before_save应该能够访问父( )。comment.post即分两个阶段保存:

comment = posts.comments.new
...
comment.save!

如果您想要单行创建,您当然可以将其包装在父级(帖子)上的单个创建函数中。

(也有可能最近的 Rails 实际上适用于问题中提出的场景,即只是一个简单的post.comments.create但我没有测试过。)

于 2014-08-21T09:42:42.837 回答