我有一个ActiveRecord::Base
类,考虑到数据库中已有的记录,需要将一个字段的值选为可用的最小整数。这个片段可以做到这一点,对你来说效果如何吗?可以改进吗?
class Thing < ActiveRecord::Base
def initialize
special = 0
Thing.find(:all,:order=>"special ASC") do |s|
break if s.special.to_i != special
special += 1
end
super
write_attribute(:special,special)
end
end
答案 0 :(得分:1)
您应该在课程中改写after_initialize
而不是initialize
。覆盖initialize
并不总是按预期工作。
至于自动值生成,我认为最好的选择是在数据库中使用自动增量列,因为我不知道如何处理并发问题。当删除行时,这会导致使用值出现间隙,所以我不知道这是否适用于你。