在模型创建上生成自定义ID

时间:2015-07-31 04:37:18

标签: ruby-on-rails postgresql activerecord

我正在尝试根据Rails默认分配的数据库ID为我的模型生成自定义ID。

也就是说,我有以下型号:

ROLE_STUDENT

保存后,class Teacher < ActiveRecord::Base end 会自动从数据库中获取Teacher。我添加了另一个名为id的列,它是一个字符串;我正在尝试生成一个基于默认ID的新ID(即,如果user_idteacher.id,那么1会变为user_id或类似的东西。

我尝试过使用T-0001方法;但那不是很有帮助;即使我不需要(比如说在更新之后),我最终会更新新列。 after_save回调无效,因为数据库尚未实际分配after_create

1 个答案:

答案 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