我正在尝试根据 Rails 中默认分配的数据库 ID 为我的模型生成自定义 ID。
也就是说,我有以下模型:
class Teacher < ActiveRecord::Base
end
保存后,教师
会自动从数据库获取id
。我添加了另一列名为 user_id
的字符串;我正在尝试生成一个基于默认 ID 的新 ID(即,如果 teacher.id
为 1
,则 user_id
变为T-0001
或类似的东西。
我尝试过使用 after_save
方法;但这并没有多大帮助;即使我不需要(例如在更新或其他之后),我最终也会更新新专栏。 after_create
回调也不起作用,因为 id
尚未由数据库实际分配。
最佳答案
为什么不直接创建一个返回该值的方法,而不是将其存储在数据库中呢?像这样的东西:
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
关于ruby-on-rails - 在模型创建时生成自定义 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31738161/