Rails MySQL自动生成列

时间:2011-06-09 09:50:39

标签: mysql ruby-on-rails-3 migration

我正在使用MySQL作为后端工作在RoR 3.x上。

是否有任何方法可以生成特定用户定义模式的方式修改现有ID(通过迁移自动生成)。

例如:“产品表”应在“ id ”字段中显示值,如“P01”,“P02”等,其中P可由用户和01,02是自动生成的。

提前致谢!

1 个答案:

答案 0 :(得分:4)

在这种情况下,'常规'ID(1,2,3,...,n)不是由rails生成的,而是由MySQL生成的(使用AUTO_INCREMENT)。所以,如果你想使用自动生成的,自动递增的ID,我建议不要搞乱这个。您可以做什么以及我建议的是创建一个额外的列,然后使用模型上的回调填充该列。

示例:

class Product < ActiveRecord::Base
  attr_accessor :user_supplied_prefix

  after_create :generate_user_supplied_id

  private
  def generate_user_supplied_id
    update_attribute(:user_supplied_id, "#{self.user_supplied_prefix}#{self.id}")
  end
end

这种方法的缺点是Product.find(user_supplied_id)不起作用。幸运的是,Product.find_by_user_supplied_id(user_supplied_id)会。

相关问题