我正在使用MySQL作为后端工作在RoR 3.x上。
是否有任何方法可以生成特定用户定义模式的方式修改现有ID(通过迁移自动生成)。
例如:“产品表”应在“ id ”字段中显示值,如“P01”,“P02”等,其中P可由用户和01,02是自动生成的。
提前致谢!
答案 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)
会。