如何正确创建记录使用:通过?

时间:2011-11-04 18:16:40

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我有一个像这样的数据库:

class Store 
  hasMany :items

class Item
  belongsTo :store

class Order
  hasMany :items, :through => :order_items

class OrderItem
  belongsTo :order

首先,这是设置此数据库的正确方法吗?

最后,如何使用多个项目正确创建记录?

例如

o = Order.new
Order.items = [ [0,1], [3,4] ] # do you add them as an array? [order_id, item_id] ?

我是否正确地走上正轨?

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为你应该从这里开始:association basics。与许多其他框架不同,Rails具有很好的文档。它非常容易消化并且非常有意义。另外,建议阅读一本好的Rails 3入门书。

要回答您的问题,上面的示例存在一些问题。对于初学者来说,它是has_manybelongs_to,而不是hasManybelongsTo。就你的建模而言,你很接近,尽管我会反对你当前的结构。

我反对的原因是因为订单应该是一个记录项目的快照,就像它在给定实例上一样。现在,如果您对项目进行版本控制,那么您的架构完全正常。如果不这样做,那么您需要确保在订购时记录有关产品的相关信息,并且只有最小用途的项目参考。

要回答结构化问题,按照现在设计的方式,以下是您对其进行建模的方法:

class Store < ActiveRecord::Base
  has_many :items
end

class Item < ActiveRecord::Base
  belongs_to :store
  has_many :order_items
end

class Order < ActiveRecord::Base
  has_many :order_items
  has_many :items, :through => :order_items
end

class OrderItem < ActiveRecord::Base
  belongs_to :order
  belongs_to :item
end

转到下一个问题:

  

最后,如何使用多个项目正确创建记录?

@order.items << item #where item is the instance of the item you want to add