Я написал enumerationjs a очень крошечную библиотеку для решения проблемы , которая обеспечивает безопасность типов , позволяет константе enum наследоваться от прототипа ], гарантирует, что константы и типы перечислений будут неизменными + множество мелких особенностей. Это позволяет проводить рефакторинг большого количества кода и перемещать некоторую логику в определение перечисления. Вот пример:
var CloseEventCodes = new Enumeration("closeEventCodes", {
CLOSE_NORMAL: { _id: 1000, info: "Connection closed normally" },
CLOSE_GOING_AWAY: { _id: 1001, info: "Connection closed going away" },
CLOSE_PROTOCOL_ERROR: { _id: 1002, info: "Connection closed due to protocol error" },
CLOSE_UNSUPPORTED: { _id: 1003, info: "Connection closed due to unsupported operation" },
CLOSE_NO_STATUS: { _id: 1005, info: "Connection closed with no status" },
CLOSE_ABNORMAL: { _id: 1006, info: "Connection closed abnormally" },
CLOSE_TOO_LARGE: { _id: 1009, info: "Connection closed due to too large packet" }
},{ talk: function(){
console.log(this.info);
}
});
CloseEventCodes.CLOSE_TOO_LARGE.talk(); //prints "Connection closed due to too large packet"
CloseEventCodes.CLOSE_TOO_LARGE instanceof CloseEventCodes //evaluates to true
Enumeration
в основном фабрика.
Полностью документированное руководство доступно здесь. Надеюсь это поможет.
Это зависит от базы данных. Просто сделайте что-то вроде следующего в своей миграции:
class MyMigration < ActiveRecord::Migration
def self.up
create_table :my_table do |t|
# ...
end
execute "ALTER TABLE my_table AUTO_INCREMENT = 1000" # for MySQL
end
def self.down
# ...
end
end
Или даже лучше, как предлагает Бэйн:
def self.up
create_table :my_table, :options => "AUTO_INCREMENT = 1000" do |t|
# ...
end
end
Однако будьте осторожны с миграциями, специфичными для базы данных! Использование любого SQL, специфичного для вашей базы данных, нарушит совместимость с другими базами данных и, как правило, не является хорошей идеей.
Любая строка, переданная в параметре ": options", будет добавлена в конец оператора SQL, который создает таблицу. Лучшая практика.
def self.up
create_table :my_table, :options => "AUTO_INCREMENT = 1000" do |t|
# ...
end
end