Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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 与RSpec和Factory Girl一起保存前的测试_Ruby On Rails_Rspec_Factory Bot - Fatal编程技术网

Ruby on rails 与RSpec和Factory Girl一起保存前的测试

Ruby on rails 与RSpec和Factory Girl一起保存前的测试,ruby-on-rails,rspec,factory-bot,Ruby On Rails,Rspec,Factory Bot,我正在使用before_save调用来更新属于特定主机的所有记录。两者都有一个名为item_id的字段: class Master < ActiveRecord::Base has_many :records before_save :update_records def update_records self.records.find_each do |r| r.item_id = self.item_id r.save end e

我正在使用before_save调用来更新属于特定主机的所有记录。两者都有一个名为item_id的字段:

class Master < ActiveRecord::Base
  has_many :records
  before_save :update_records
  def update_records
    self.records.find_each do |r|
      r.item_id = self.item_id
      r.save
    end
  end
end

class Record < ActiveRecord::Base
end
原因很有趣。模型在记录模型的第二个实例上执行其工作,该实例已成功保存,但未返回规范:

"MASTER - CREATED IN SPEC"
#<Master:0x007fd0ed55ec20> {
    :id => 26,
    :item_id => 1,
}
"RECORD - CREATED IN SPEC"
#<Record:0x007fd0ea157e40> {
    :id => 16,
    :item_id => 1,
    :master_id => 26,
}
"RECORD - AFTER SAVE IN MODEL"
#<Record:0x007fd0ed2f9a70> {
    :id => 16,
    :item_id => 2,
    :master_id => 26,
}
"MASTER - UPDATED IN SPEC"
#<Master:0x007fd0ed55ec20> {
    :id => 26,
    :item_id => 2,
}
"RECORD - FINAL IN SPEC"
#<Record:0x007fd0ea157e40> {
    :id => 16,
    :item_id => 1,
    :master_id => 26,
}
你知道吗

为什么会这样? 我怎样才能通过这个规范?
看起来您的记录只是显示旧数据,需要刷新。尝试:

record.reload.item_id.should == 2

看起来您的记录只是显示旧数据,需要刷新。尝试:

record.reload.item_id.should == 2