Rails自定义序列号每年重新启动

时间:2011-08-02 16:07:18

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

我需要一个U2011-001格式的自定义序列号等等,其中2011年是年份,每年必须重新开始,我想在使用id时生成它但是这只是不断上升...我需要每年重新启动。

3 个答案:

答案 0 :(得分:1)

我认为你可以使用after create hook填充你的序列号,如果你绝对必须的话。

after_create :set_serial_number

def set_serial_number
  serial_number = "U#{created_at.year}-#{id}"
end

否则,如果您不需要保留此项,则可以使用方法以这种方式填充序列号字段:

def serial_number
  "U#{created_at.year}-#{id}"
end

答案 1 :(得分:0)

def last_serial_number
  @last_serial_number ||= YourModel.select(:serial_number).
                            where('serial_number LIKE "U' + Time.new.year + '-%"').
                            order("serial_number DESC").first
end

def last_serial_sub_part
  last_serial_number.split('-').last
end

def next_serial
  last_serial_number.nil? ?
    generate_serial_number :
    generate_serial_number(last_serial_sub_part.succ)
end

def generate_serial_number(sub_part='000')
  "U#{Time.new.year}-#{sub_part}"
end

这样的事情可行。它不在我的头顶,所以它很邋..您可以将序列号字段设置为before_validation回调中next_serial返回的值。我也强烈建议将大多数这些方法设为私有。

答案 2 :(得分:0)

我创建了一个存储该值的表,并进行了2次SQL查询,以查找上次更新的时间检查是否为新年,如果是,则重新启动该数字。