2010-10-24 58 views
0

目前我有一個訂單類。每個訂單有1到無限數量的項目。項目的數量在運行時間之前是未知的。由於在活動記錄/導軌中沒有字段類型的數組,因此如何創建可變數量的列?是否有一種更有說服力的方式來創建具有可變列數的表:Active Record&Rails 3?

我能想到的唯一方法是提前指定一堆票列;但是非常靈活且效率低下:

class CreateOrders < ActiveRecord::Migration 
    def self.up 
    t.integer :ticket_id, :ticket_id, :ticket_id, :ticket_id, :ticket_id 
    t.decimal :total 
    t.timestamps 
    end 

    def self.down 
    drop_table :orders 
    end 
end 

回答

4

通常情況下,數據庫表的第三範式不會有可變列數。

您擁有的可以是2個表格,一個用於訂單,並且「有許多」行項目,因此此LineItem模型將具有存儲在line_items表中的條目,每個記錄都有一個product_id和quantity,並且每個LineItem 「屬於」一個命令。 (有一個order_id或line_item.order指向它所屬的順序)。

+0

如何設置訂單平板電腦以接受1個或多個line_items? – 2010-10-24 16:43:09

0

您必須使用另一個名爲items的項目,其中order_id column.Hence許多項目可以關聯到一個訂單。換句話說,一個訂單可以有很多項目。

閱讀此article解釋有很多發票(在您的案例項目)的訂單。

0

如前所述,您希望將此建模爲belongs_to/has_many關係。

class CreateOrders < ActiveRecord::Migration 
    def self.up 
    t.decimal :total 
    t.timestamps 
    end 

    def self.down 
    drop_table :orders 
    end 
end 

class CreateItems < ActiveRecord::Migration 
    def self.up 
    t.integer :ticket_id 
    t.integer :order_id 
    t.timestamps 
    end 

    def self.down 
    drop_table :items 
    end 
end 

class Order < ActiveRecord::Base 
    has_many :items, :dependent => "destroy" 
end 

class Item < ActiveRecord::Base 
    belongs_to :order 
end 

Order.all.each do |order| 
    puts "Order " + order + " has items :" 
    order.items.each { |item| puts " " + item } 
end 
相關問題