ruby-on-rails - 属于两个模型的模型还是多态关联?

标签 ruby-on-rails ruby-on-rails-4 associations models

我有三个模型

  • 用户
  • 产品
  • 订购

  • 一个 user谁提交 product s等用户可以order那个产品。

    现在我想实现另一个模型 payment ,我作为管理员向用户付款。

    问题
    我对应该在 user 之间创建什么样的关联感到困惑, orderpayment ?

    这是我目前拥有的:
    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基本上允许您使用单个表来管理多个关联:

    enter image description here

    所以如果你想链接multiple表到 single表,它本质上会创建一个 pseudo对象,它可以与不同的数据类型相关联。我们通常使用可以被多个模型使用的表的多态关联,示例包括 images , errors , posts等等:

    enter image description here

    关于将多态关联与 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/

    相关文章:

    ruby-on-rails - 如何在 Linux 中设置 Ruby 环境?

    ruby-on-rails - 如何更新 has_many :through association with strong parameters in Rails 4

    ruby-on-rails - Rails 4/postgresql - 根据另一个表数据在一个表上插入数据(after_create)

    ruby-on-rails - rails : method_missing is not called on model when using associations

    ruby-on-rails - 不可逆迁移 - 警告并确认而不是中止?

    ruby-on-rails - 如何使用复选框应用带有acts_as_taggable_on 的标签?

    ruby-on-rails - NilClass :Class"for global bar search 的元搜索 "undefined method ` 模型名称'

    javascript - 如何在AJAX中获取复选框值

    ruby-on-rails - SimpleCaptcha 和 Formtastic 错误

    mysql - .where 中两个日期之间的差异