我正在尝试根据Rails默认分配的数据库ID为我的模型生成自定义ID。
也就是说,我有以下型号:
ROLE_STUDENT
保存后,class Teacher < ActiveRecord::Base
end
会自动从数据库中获取Teacher
。我添加了另一个名为id
的列,它是一个字符串;我正在尝试生成一个基于默认ID的新ID(即,如果user_id
是teacher.id
,那么1
会变为user_id
或类似的东西。
我尝试过使用T-0001
方法;但那不是很有帮助;即使我不需要(比如说在更新之后),我最终会更新新列。 after_save
回调无效,因为数据库尚未实际分配after_create
。
答案 0 :(得分:2)
为什么不,您只需创建一个返回该值的方法,而不是将其存储在数据库中?类似的东西:
class Teacher < ActiveRecord::Base
...
def user_id
"T-#{self.id.to_s.rjust(4, '0')}"
end
end
如果您确实想将其存储在数据库中,则应使用after_save
检查是否已生成该值:
class Teacher < ActiveRecord::Base
after_save :generate_user_id
...
private
def generate_user_id
self.update(user_id: "T-#{self.id.to_s.rjust(4, '0')}") if self.user_id.nil?
end
end