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