我需要一个U2011-001格式的自定义序列号等等,其中2011年是年份,每年必须重新开始,我想在使用id时生成它但是这只是不断上升...我需要每年重新启动。
答案 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查询,以查找上次更新的时间检查是否为新年,如果是,则重新启动该数字。