如何在Rails迁移中使用for循环?

时间:2014-02-21 05:44:01

标签: ruby-on-rails loops activerecord migration

我对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

如何使用循环创建列?

2 个答案:

答案 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

但请注意,这是一个糟糕的数据库设计。