Activerecord默认访问者&不寻常的要求

时间:2010-04-15 22:39:11

标签: ruby activerecord

我有一个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

1 个答案:

答案 0 :(得分:1)

您应该在课程中改写after_initialize而不是initialize。覆盖initialize并不总是按预期工作。

至于自动值生成,我认为最好的选择是在数据库中使用自动增量列,因为我不知道如何处理并发问题。当删除行时,这会导致使用值出现间隙,所以我不知道这是否适用于你。