一千萬個為什麽

搜索

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

最佳答案

您應該覆蓋類中的 after_initialize ,而不是 initialize 。覆蓋 initialize 並不總是按預期工作。

至於自動值生成,我認為最好的選擇是在數據庫中使用自動增量列,因為我不確定如何處理並發問題。當刪除行時,這會導致使用值出現間隙,因此我不知道這是否適用於您。

轉載註明原文: Activerecord默認訪問者和不尋常的要求