Ruby on rails 属于两个模型或多态关联的模型?
我有三种型号Ruby on rails 属于两个模型或多态关联的模型?,ruby-on-rails,ruby-on-rails-4,associations,models,Ruby On Rails,Ruby On Rails 4,Associations,Models,我有三种型号 使用者 产品 命令 提交产品的用户和其他用户可以订购该产品 现在,我想实现另一个模型支付,其中我作为管理员向用户支付费用 问题 我不知道应该在用户、订单和付款之间建立什么样的关联 这就是我目前拥有的: 在app/models/user.rb中 class User < ActiveRecord::Base has_many :products_selling, class_name: 'Product' has_many :orders_received, cla
产品的用户
和其他用户可以订购该产品
现在,我想实现另一个模型支付
,其中我作为管理员向用户支付费用
问题
我不知道应该在用户
、订单
和付款
之间建立什么样的关联
这就是我目前拥有的:
在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
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
class Payment < ActiveRecord::Base
belongs_to :user
belongs_to :order
在app/models/payment.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
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
class Payment < ActiveRecord::Base
belongs_to :user
belongs_to :order
classpayment
我不确定应该使用什么关联,我一直在阅读,有一些例子使用了polymorphic::true
,但它们都有has\u many
,在我的例子中,一张订单对应一笔付款。关联
基本上允许您使用单个表来管理多个关联:
因此,如果您想将多个
表链接到一个
表,它将创建一个可以与不同数据类型关联的
伪对象。我们通常将多态关联用于可由多个模型使用的表,例如图像
,错误
,帖子
等:
关于将多态关联与has\u many
/has\u 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
#app/models/user.rb
类用户用户为订单付费
属于:用户#->付款用户
结束
这将允许您为每个
订单创建付款
——这才是付款的真正目的,对吗?(您为订单
付费,而不是产品
)感谢@Rich提供了详尽的答案。看起来多态关联不太适合这种情况。而且,我似乎走对了方向。为了让问题更清楚(不确定这是否会改变答案),用户会购买其他用户发布的产品。当一个用户下订单时,钱被转移到管理员的帐户,然后这个管理员在拿到他的份额后转移所有卖家(用户)的钱。这么说来,是否属于“app/models/payment.rb”中必需的:user
,因为总是有一个管理员向卖家付款。这是一个自助加入的候选:?