构建是否会阻止模型的before_create被触发?

时间:2011-09-16 23:31:16

标签: ruby-on-rails ruby-on-rails-3

我有两种模式:

Room
RoomMembers

...

class Room
  before_create  :add_room_member

  def add_room_member
    self.room_members.build(:user_id => self.user.id)
  end

然后...

 class RoomMember
    before_create :default_values

    def default_values
      Rails.logger.info 'STUFF'
    end

创建新房间时。 RoomMember before_create默认值方法没有触发......为什么会这样?

由于

1 个答案:

答案 0 :(得分:0)

build本质上是new的别名,它实例化对象,但不保存它。由于在Rails中创建对象只是实例化并保存对象,因此在使用构建时缺少保存部分。看看你的例子,我认为在创建房间之后添加房间成员更有意义,而不是之前。然后,您可以使用create,它应该触发RoomMember回调。

class Room
  after_create  :add_room_member

  def add_room_member
    self.room_members.create(:user_id => self.user.id)
  end