То, что вы хотите сделать, это определить новый метод создания столбца, который предоставляет опции для создания вашего пользовательского типа. Что по существу делается путем добавления метода, который ведет себя как t.integer ...
в миграциях. Хитрость в том, чтобы выяснить, куда добавить этот код.
Где-то в каталоге инициализаторов поместите этот фрагмент кода:
module ActiveRecord::ConnectionAdapters
class TableDefinition
def currency (*args)
options = args.extract_options!
column_names = args
options[:precision] ||= 8
options[:scale] ||= 2
column_names.each { |name| column(name, 'decimal', options) }
end
end
end
Теперь вы можете использовать метод валюты, определяя столбец валюты в любое время, когда вам это нужно.
Пример:
def self.up
create_table :products do |t|
t.currency :cost
t.timestamps
end
end
Чтобы добавить столбец валюты в существующую таблицу:
def self.up
change_table :products do |t|
t.currency :sell_price
end
end
Предостережение: У меня нет времени, чтобы проверить это, поэтому нет никаких гарантий. Если это не сработает, это, по крайней мере, должно поставить вас на правильный путь.