rails 自增长
来源:互联网 发布:windows移动硬盘分区 编辑:程序博客网 时间:2024/05/22 14:50
/lib/document_number.rb
class DocumentNumber TIME_TO_WAIT = 1 def initialize(document) @sequence = "#{document}_number_seq" end def get(time_prefix_format = '%y%m%d', number_of_digits = 6) prefix = Time.zone.now.strftime(time_prefix_format) start_value = prefix + ('0' * number_of_digits) next_value = get_uncached_sequence if start_value.to_i > next_value.to_i set_value(start_value) sleep(TIME_TO_WAIT) next_value = get_uncached_sequence end next_value end def get_uncached_sequence ActiveRecord::Base.uncached do get_sequence end end def get_sequence next_value rescue ActiveRecord::StatementInvalid => e # the sequence is not created yet create_sequence next_value end class << self def get_order_number number = new(:order).get('%y%m%d', 5) "B#{number}" end def get_sub_order_number number = new(:sub_order).get "M#{number}" end def get_bill_number "T#{new(:bill).get}" end def get_special_approval_number "S#{new(:special_approval).get}" end end private def create_sequence ActiveRecord::Base.connection.execute("create sequence #{@sequence}") end def next_value ActiveRecord::Base.connection.select_value("select nextval('#{@sequence}')") end def set_value(value) ActiveRecord::Base.connection.execute("select setval('#{@sequence}', #{value})") endend
migration
def change ActiveRecord::Base.connection.execute("create sequence crowdfunding_number_seq")end
config/application
config.autoload_paths << Rails.root.join('lib')
rails console
DocumentNumber=> DocumentNumber
说明已经可以用这个类
model/order.rb
before_create :save_order_number #保存后生成认筹编码 def save_order_number self.order_number = DocumentNumber.get_order_number end
0 0
- rails 自增长
- 自增长
- Oracle解决自增长
- Oracle自增长字段
- oracle自增长字段
- MYSQL字段自增长
- oracle 自增长字段
- Oracle 自增长字段
- oracle 创建自增长
- ORACLE Sequence 自增长
- oracle主键自增长
- Oracle 自增长字段
- 关于ORACLE自增长
- sqlite自增长字段
- oracle 自增长主键
- Oracle ID自增长
- oracle ID自增长
- Oracle 的 自增长
- java 修饰符全解
- Mac 可设置环境变量的位置、查看和添加PATH环境变量
- 为什么要努力
- 何凯明深度残差网络翻译
- 编译设备树
- rails 自增长
- vs2015 编译obs-studio
- git的常见操作
- 时间复杂度与空间复杂度
- 使用hMailServer搭建本地邮件服务器
- @Param 注解在Mybatis中的使用 以及传递参数的三种方式
- Libpcap编程(6)
- 第四届 山东省ACM Rescue The Princess(计算几何)
- Anaconda使用总结