Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 rails、activerecord回调未保存_Ruby On Rails - Fatal编程技术网

Ruby on rails rails、activerecord回调未保存

Ruby on rails rails、activerecord回调未保存,ruby-on-rails,Ruby On Rails,我有一个带有回调的模型,在更新后运行: after_update :set_state protected def set_state if self.valid? self.state = 'complete' else self.state = 'in_progress' end end 但它实际上并没有保存这些值,为什么不呢?无论模型是否有效,它都不会写入任何内容,即使我删除了if self.valid?条件,我似乎无法保存状态 嗯,这听起来可能很愚蠢

我有一个带有回调的模型,在更新后运行

after_update :set_state

protected

def set_state
  if self.valid?
    self.state = 'complete'
  else
    self.state = 'in_progress'
  end
end  
但它实际上并没有保存这些值,为什么不呢?无论模型是否有效,它都不会写入任何内容,即使我删除了
if self.valid?
条件,我似乎无法保存状态

嗯,这听起来可能很愚蠢,我需要在上面运行
save


更新


实际上,我不能在那里运行
save
,因为它会导致无限循环。[叹气]

更新后
会在更新后运行,保存后也会运行。您可以使用
update\u attribute
保存此值,或者只需调用
save
(我不确定是否有任何重复)。最终,您可以在更新之前在
中分配它(可用选项列表为)。另一方面,无效对象无论如何都不会被保存,所以为什么要在这里指定更新后运行的
状态,保存后也是如此。您可以使用
update\u attribute
保存此值,或者只需调用
save
(我不确定是否有任何重复)。最终,您可以在更新之前在
中分配它(可用选项列表为)。另一方面,无效对象无论如何都不会被保存,因此,根据ActiveRecord文档中的示例执行以下操作的事实判断,为什么要在此处指定
状态

def before_save(record)
  record.credit_card_number = encrypt(record.credit_card_number)
end

def after_save(record)
  record.credit_card_number = decrypt(record.credit_card_number)
end

您确实需要自己保存该记录。

从ActiveRecord文档中的示例执行以下操作的事实来看:

def before_save(record)
  record.credit_card_number = encrypt(record.credit_card_number)
end

def after_save(record)
  record.credit_card_number = decrypt(record.credit_card_number)
end

您确实需要自己保存记录。

更新后,将对内存中的对象而不是表中的记录起作用。要更新数据库中的属性,请执行以下操作

after_update :set_state

protected

def set_state
  if self.valid?
    self.update_attribute('state', 'complete')
  else
    self.update_attribute('state', 'in_progress')
  end
end 

更新在内存中的对象而不是表中的记录上起作用。要更新数据库中的属性,请执行以下操作

after_update :set_state

protected

def set_state
  if self.valid?
    self.update_attribute('state', 'complete')
  else
    self.update_attribute('state', 'in_progress')
  end
end