我对RoR很新,并尝试编写一个向我的数据库添加200个类似列的迁移。对于表格中的每张发票,我想在单独的列中收集订单项。每张发票最多可包含200件商品。
这是我写的代码(它不会像我希望的那样循环):
def change
create_table :invoices do |t|
200.times do |i|
t.string :itemdescription_i
t.decimal :itemqty_i
t.decimal :itemunitprice_i
t.decimal :itemextendedprice_i
end
end
end
如何使用循环创建列?
答案 0 :(得分:2)
最好在发票表中创建名为invoice_item的链接表。任何相关的发票项目都将添加到此表中,引用发票。然后在您的代码中,您只需检索发票并调用invoice.invoice_items
即可 create_table :invoice_items do |t|
t.references :invoice
t.string :itemdescription
t.decimal :itemqty
t.decimal :itemunitprice
t.decimal :itemextendedprice
end
答案 1 :(得分:1)
200.times do |i|
t.string :"itemdescription_#{i}"
t.decimal :"itemqty_#{i}"
t.decimal :"itemunitprice_#{i}"
t.decimal :"itemextendedprice_#{i}"
end
但请注意,这是一个糟糕的数据库设计。