Rails与自定义字段的关联

时间:2013-08-03 16:01:33

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

我迷失在Rails提供的所有关联选项中。

我有Users的表格。那些UsersProducts。这只是has_many :products关系。

但是,我想为用户提供产品列表。他们会选择一些产品并为其增加价格。

基本上,我有

USER 1 ----->  PRODUCT 1 ------> PRICE 1    <----.
       ----->  PRODUCT 2 ------> PRICE 2         |
USER 2 ----->  PRODUCT 1 ------> PRICE 3    <----¨
       ----->  PRODUCT 3 ------> PRICE 4

我应该创建三个表:UserProductPrice吗?

如果用户想要根据数量,需求等更多地定制他/她的产品,该怎么办?那么我应该改为创建以下表格:UserProductProductDetail

这样,user has_many :productproduct has_many :product_detail

Rails的做法是什么?

我迷失了所有has_manyhas_onehas_many :through等。

1 个答案:

答案 0 :(得分:1)

我会创建以下内容:

class User
  has_many :purchases
end

class Product
  has_many :purchases
end

class Purchase
  belongs_to :user
  belongs_to :product

  # mongoid syntax, if using ActiveRecord, use a migration
  field :quantity, type: Integer, default: 0
  field :price, type: Float, default: 0.0
end

user = User.new
apple = Product.new
tea = Product.new
chocolate = Product.new

user.purchases.build(product: apple, price: 2.99, quantity: 1)
user.purchases.build(product: tea, price: 5.99, quantity: 2)
user.purchases.build(product: chocolate, price: 3.99, quantity: 3)

仅供参考:UserProductPurchase之间的这种关系类似于has_and_belongs_to_many。使用has_and_belongs_to_many时,rails只需链接上面的类。我们这样做是为了使用Purchasequantity自定义price课程。