Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 构建是否阻止模型';在你开火之前?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 构建是否阻止模型';在你开火之前?

Ruby on rails 构建是否阻止模型';在你开火之前?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有两种型号: Room RoomMembers 然后 class RoomMember before_create :default_values def default_values Rails.logger.info 'STUFF' end 创建新房间时。创建默认值之前的RoomMember方法未触发。。。。为什么呢 感谢build本质上是new的别名,它实例化对象,但不保存它。由于在Rails中创建对象只是实例化和保存对象,因此在使用buil

我有两种型号:

Room
RoomMembers

然后

 class RoomMember
    before_create :default_values

    def default_values
      Rails.logger.info 'STUFF'
    end
创建新房间时。创建默认值之前的RoomMember方法未触发。。。。为什么呢


感谢

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

class Room
  after_create  :add_room_member

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

我想起了一句话:“一个满是空人的房间。”
class Room
  after_create  :add_room_member

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