Я новичок в рельсах (я думаю, что у меня довольно хорошо разбираются основы), и я работаю над приложением с простой структурой родитель-потомок: Company => Client => Group => Order,Соответствующими таблицами БД для этого вопроса являются Group и Order (Group has_many Orders).
Прямо сейчас, когда я создаю новую группу, одним из текстовых полей в форме является «Количество заказа» (которое является атрибутом: size в модели группы), и в строке кода естьдействие Create для GroupsController, которое генерирует n пустых ордеров, принадлежащих к этой конкретной группе:
if @group.save
@group.size.times do
Order.create(:group_id => @group.id)
end
Это прекрасно работает, но я хочу, чтобы Order.id был десятичным числом, а нецелое число.Я попытался сгенерировать следующую миграцию:
class ChangeOrderIdToDecimal < ActiveRecord::Migration
def up
change_column :orders, :id, :decimal, :precision => 5, :scale => 4
end
, которая сначала, казалось, делала то, что я хотел.Все существующие заказы изменились с 4, 5, 6 на 4.0, 5.0, 6.0.Однако в конечном итоге я хочу добавить некоторый код к действию Create в GroupsController следующим образом:
if @group.save
order_id_decimal = 0.001
@group.size.times do
order_id = "#{@group.id}.#{order_id_decimal}".to_f
Order.create(:group_id => @group.id, :id => order_id)
order_id_decimal += 0.001
end
Идея состоит в том, что если идентификатор группы равен 75, то заказы в этой группе будутимеют идентификаторы 75.001, 75.002, 75.003 и т. д.
По какой-то причине, хотя я создаю новые группы, он пытается сохранить каждый идентификатор заказа как 0.0000 и выдает мне эту ошибку:
ActiveRecord::RecordNotUnique in GroupsController#create
Mysql2::Error: Duplicate entry '0.0000' for key 'PRIMARY': INSERT INTO `orders`
(`created_at`, `group_id`, `note`, `order_status`, `title`, `updated_at`, ) VALUES
('2012-03-04 20:28:15', 20, NULL, NULL, NULL, '2012-03-04 20:28:15')
Я пытался вручную изменить идентификатор ордера с консоли rails, и он экономит без ошибок, но на самом деле на самом деле не сохраняет.Если я набираю Order.find (0.0), он вытягивает один только что измененный ордер и имеет 0.0 для ID.Я полностью сбит с толку этим, и я не смог найти никакой помощи от поиска в Google.У кого-нибудь есть идеи?