在子创建回调中访问父实例

时间:2012-04-30 10:23:41

标签: ruby-on-rails ruby-on-rails-3.1 has-many

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

post.comments.create 'blah'

在对象创建过程中有没有办法访问父实例?

class Comment < ActiveRecord::Base

  def before_save
    # do something with @post
  end

end

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

2 个答案:

答案 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,但我还没有经过测试。)