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
    ,因为总是有一个管理员向卖家付款。这是一个自助加入的候选:?