MySQL делает это автоматически , если вы используете составной первичный ключ и только один термин автоматически увеличивается.Я не уверен, как другие базы данных справляются с этим, поэтому вам придется изучить это, если вы не используете MySQL.
К сожалению, Rails не создает составные ключи из коробки.Существует плагин Composite_primary_keys .У меня нет опыта работы с этим плагином, поэтому ваш пробег может отличаться.
Редактировать: Объяснение того, почему код в вопросе не работает:
Похоже, вы ожидаете результатусловие быть номером студента.Но так оценивается код.
def test!
update_attributes :updater_id => User.current_user.id,
:student_number => sitenum = self.site_id
count = Student.count_by_sql("SELECT MAX(student_number) FROM students WHERE site_id = #{sitenum}")
if count >= 2001
Student(:condition => { :site_id => sitenum },
:order => "student_number DESC").student_number + 1
else
2001
end
end
В результате этот тест!возвращает номер студента, которого вы хотите присвоить.
Этот код выполняет то, что вы описали:
def test!
new_number = Student.count_by_sql("SELECT MAX(student_number) FROM students WHERE site_id = #{sitenum}") + 1
new_number = new_number > 2000 ? new_number : 2001
update_attributes :updater_id => User.current_user.id,
:student_number => new_number
end