Activerecord стандартные средства доступа и необычные требования - PullRequest
0 голосов
/ 16 апреля 2010

У меня есть класс 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 Ответ

1 голос
/ 16 апреля 2010

Вы должны переопределить after_initialize в вашем классе вместо initialize.Переопределение initialize не всегда работает должным образом.

Что касается автоматического генерирования значений, я думаю, что лучшим вариантом будет использование столбца с автоинкрементом в базе данных, потому что я не уверен, как бы вы справились с проблемами параллелизма.Это может привести к пробелам в используемых значениях при удалении строк, поэтому я не знаю, сработает ли это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...