Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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 - Fatal编程技术网

Ruby on rails “创建后”不会在数据库中创建更改

Ruby on rails “创建后”不会在数据库中创建更改,ruby-on-rails,Ruby On Rails,根据家庭工作文档所属的作业的截止日期,我在创建后使用回调来计算提交的家庭工作文档的罚款 class HomeworkDocument < ActiveRecord::Base after_create :calculate_penalty private def calculate_penalty time_late = created_at - assignment.deadline case when time_late &l

根据
家庭工作文档所属的
作业
的截止日期,我在创建
后使用
回调来计算提交的
家庭工作文档
的罚款

  class HomeworkDocument < ActiveRecord::Base

  after_create :calculate_penalty
  private

    def calculate_penalty
      time_late = created_at - assignment.deadline
      case
      when time_late < 0
        self.penalty = 0
      when time_late > 1.day
        self.penalty = 1
      end
    end

这是预期的吗?如果是这样的话,我如何在正确应用“创建后”回调后创建示例数据?

您只需要添加一个调用来保存
HomeworkDocument的实例,所以使用
self.save

def calculate_penalty
  time_late = created_at - assignment.deadline
  case
  when time_late < 0
    self.penalty = 0
  when time_late > 1.day
    self.penalty = 1
  end
  self.save
end
def计算罚金
time\u late=在-assignment.deadline创建
案例
当时间延迟<0时
自我惩罚=0
当时间晚到>1.5天时
自我惩罚=1
结束
自救
结束

您必须调用
.save
才能在数据库中保留更改(在
计算惩罚
回调中),您完全正确。结果证明我的规范是错误的——我忘了从数据库中重新加载家庭作业变量。如果你回答这个问题,我会认为它是正确的。谢谢
def calculate_penalty
  time_late = created_at - assignment.deadline
  case
  when time_late < 0
    self.penalty = 0
  when time_late > 1.day
    self.penalty = 1
  end
  self.save
end