【问题标题】:A model that belongs_to two models or a polymorphic association?属于两个模型的模型还是多态关联?
【发布时间】:2014-06-16 02:38:13
【问题描述】:

我有三个模型

  1. 用户
  2. 产品
  3. 订购

提交products 的user 和其他用户可以order 该产品。

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

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

这是我目前拥有的: 在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,在我的情况下,一个订单对应一次付款。

【问题讨论】:

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


【解决方案1】:

协会

Polymorphic associations基本上可以让你用一张表来管理多个关联:

因此,如果您想将multiple 表链接到single 表,它实际上将创建一个pseudo 对象,该对象可以与不同的数据类型相关联。我们通常使用可被多个模型使用的表的多态关联,例如imageserrorsposts 等:

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

这将允许您为每个order 创建payments - 这是真的付款的用途,对吧? (您支付的是order,而不是product

【讨论】:

  • 感谢@Rich 的详尽回答。看起来polymorphic 关联不太适合这种情况。此外,似乎我走在了正确的轨道上。只是为了让问题更清楚(不确定这是否会改变答案),用户购买其他用户发布的产品。当用户下订单时,钱会转移​​到管理员的账户,然后这个管理员在收取他的分成后转移所有卖家(用户)的钱。话虽如此,“app/models/payment.rb”中是否需要belongs_to :user,因为它始终是一位管理员向卖家付款。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
相关资源
最近更新 更多