ruby-on-rails - 在模型创建时生成自定义 ID

标签 ruby-on-rails postgresql activerecord

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

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

class Teacher < ActiveRecord::Base
end

保存后,教师会自动从数据库获取id。我添加了另一列名为 user_id 的字符串;我正在尝试生成一个基于默认 ID 的新 ID(即,如果 teacher.id1,则 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/

相关文章:

ruby-on-rails - session 存储 :active_record_store options

php - Codeigniter Active record Join 2 x From in 语句

ruby-on-rails - Rails.where 大于/小于,无需编写 SQL 语句

node.js - 从sequelize.js获取错误的对象名称,包括从数据到数据的JSON响应中的方法

ruby-on-rails - 取消 Rails 数据库连接

postgresql - Postgres 9.3 查询速度慢

ruby-on-rails - ActiveAdmin : maps does not appear 中的 gmap4rails

ruby-on-rails - 创建或覆盖 Rails Active Record 宏

javascript - Rails5 + JQuery 进度条不起作用

ruby-on-rails - Rails,在 Controller 中使用文件的内容