ruby-on-rails - 这个 Rails4 错误是什么意思?致命的 : exception reentered . .. `rescue in rollback_active_record_state!'

标签 ruby-on-rails ruby activerecord

我在我的 Rails 4 约会安排应用程序中遇到了几个错误,我似乎无法更正或找出根本原因。

我的种子文件总是因众所周知的“错误,堆栈级别太深”而中断。但是当我运行我认为它正在中断的方法时,我得到了这个不同的错误:

Seeding time slots for workday no. 1
   (0.5ms)  SAVEPOINT active_record_1
   (0.5ms)  ROLLBACK TO SAVEPOINT active_record_1
fatal: exception reentered
from /Users/rskelley/.rvm/gems/ruby-2.0.0-p481/gems/activerecord-4.1.5/lib/active_record/transactions.rb:286:in `rescue in rollback_active_record_state!'

The involved files are as follows.

Seeds.rb

puts "Seeding Workdays."

day_numbers = (1..5).to_a
5.times do
  start_time = WorkDay.time_slot_format(9)
  end_time = WorkDay.time_slot_format([5,6][rand(2)])
  rand_date = Date.today + day_numbers.slice!(0)
  WorkDay.create(start_time: start_time, end_time: end_time, date: rand_date )
end

puts "Generating Time Slots for each WorkDay"

workdays = WorkDay.all
workday_number = 1

workdays.each do |workday|
  calendar_manager = CalendarManager.new(workday: workday, date: workday.date)
  puts "Seeding time slots for workday no. #{workday_number}"
  workday_number += 1
  calendar_manager.generate_time_slots!
end

calendar_manager.rb

include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
extend AppointmentTools

attr_accessor :workday, :date, :slot_length

 def generate_time_slots!(increment=15)
    # Space between start and end
    @slot_length ||= increment

    day = self.workday.date
    hour = 9
    minute = 0
    @time_slots = Array.new

    33.times do
      beginning = TimeOfDay.parse(hour) + minute.minutes
      ending = beginning + @slot_length.minutes
      time_slot = TimeSlot.create work_day_id: self.workday.id, start_time: beginning.strftime("%I:%M %p"), end_time: ending.strftime("%I:%M %p"), date: day
      @time_slots << time_slot
      minute += @slot_length
    end
  end

查看我的提交历史,我没有发现对 generate_time_slots 进行了任何更改!方法,它以前有效。我正在使用 Rails 4、Ruby 2。

最佳答案

所以我刚刚遇到了类似的问题和类似的错误消息。

只是 ActiveRecord 正在“帮助”并告诉您您递归地调用了相同的方法。基本上不是说你用完了堆栈,而是查看它最初获得的跟踪并确定它实际上是一个重新输入的递归调用。

至少,这解决了我的问题。

关于ruby-on-rails - 这个 Rails4 错误是什么意思?致命的 : exception reentered . .. `rescue in rollback_active_record_state!',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26121671/

相关文章:

ruby-on-rails - 在 after_commit 中更新属性时防止无限循环,:on => :create

javascript - 如何在我的 sprockets 预处理 js 文件(不是 View )中获取 escape_javascript 和其他助手?

ruby-on-rails - 如何将 Twitter 配置移出 Controller ? ( rails )

ruby-on-rails - 我的 Rails 应用程序中定义的方法 'is_admin?' 在哪里?

html - 使用 Ruby 删除某些 HTML 标签

php - 代码点火器 : how to write where_in OR where_in query?

html - 在 if ... else 语句的基础上添加额外的类

ruby-on-rails - 雾 OpenSSL 错误

ruby-on-rails - 如果 XML 映射是根元素,则无法加载数组

ruby-on-rails - 将模型上的所有方法调用委托(delegate)给关联