我这里有“鸡肉或鸡蛋”的问题......
我有一个带有唯一字段的模型,该字段是使用记录ID(模型的id)和字符串创建的,我在此字段的迁移(哈希)中有一个:null => false所以。 ..当使用例如before_validation保存对象时,应该自动生成此哈希,但问题是我需要数据库中的id来创建哈希,但是在保存对象之前我没有这个id ...那我该怎么解决呢?这不是一个更改数据库限制的选项,因为它已经在生产中,也不是更改哈希种子的选项,我必须使用ID ...
我现在正在做什么(我知道这不是一个很好的解决方案)是在哈希字段中保存一个虚拟并保存记录,之后我创建哈希并再次保存对象...但这是在控制器中制作,我希望在模型中拥有所有业务逻辑......
任何想法?
答案 0 :(得分:1)
在模型中使用after_create
:
after_create :generate_hash
... your model's code ...
private
def generate_hash
# hash generation code goes here
self.save
end
这将保存记录两次,就像你在控制器中做的那样,除了它会在模型中完成。