我有三个模型
一个
user
谁提交 product
s等用户可以order
那个产品。现在我想实现另一个模型
payment
,我作为管理员向用户付款。问题
我对应该在
user
之间创建什么样的关联感到困惑, order
和 payment
?这是我目前拥有的:
在
app/models/user.rb
class User < ActiveRecord::Base
has_many :products_selling, class_name: 'Product'
has_many :orders_received, class_name: 'Order', through: :products_selling, source: :orders
has_many :orders_made, class_name: 'Order'
has_many :products_ordering, class_name: 'Product', through: :orders_made, source: :product
has_one :payment, class_name: 'Payment', through: :orders_received
并在
app/models/order.rb
class Order < ActiveRecord::Base
belongs_to :product
belongs_to :buyer, class_name: 'User', foreign_key: :user_id
has_one :seller, class_name: 'User', through: :product
has_one :payment, through: :seller
并在
app/models/payment.rb
class Payment < ActiveRecord::Base
belongs_to :user
belongs_to :order
我不确定应该使用什么关联,我一直在阅读并且有使用
polymorphic: :true
的示例。但他们都在 has_many
,在我的情况下,一个订单对应于一次付款。
最佳答案
协会
Polymorphic associations基本上允许您使用单个表来管理多个关联:
所以如果你想链接multiple
表到 single
表,它本质上会创建一个 pseudo
对象,它可以与不同的数据类型相关联。我们通常使用可以被多个模型使用的表的多态关联,示例包括 images
, errors
, posts
等等:
关于将多态关联与 has_many
相关联/has_one
,我不完全确定(如果你愿意,我可以研究)
——
修复
在你的情况下,我会这样做:
#app/models/user.rb
class User < ActiveRecord::Base
has_many :orders
has_many :purchases, class_name: 'Order', foreign_key: "buyer_id"
has_many :products
has_many :bought, class_name: 'Product', through: :purchases
end
#app/models/order.rb
class Order < ActiveRecord::Base
belongs_to :user
belongs_to :product
has_one :payment
end
#app/models/payment.rb
Class Payment < ActiveRecord::Base
#fields - id | user_id | order_id | created_at | updated_at
belongs_to :order #-> user pays for order
belongs_to :user #-> user making the payment
end
这将允许您创建
payments
每个order
- 这就是付款的真正用途,对吗? (您为 order
而不是 product
付费)
关于ruby-on-rails - 属于两个模型的模型还是多态关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235996/