1

在我的 Rails (3.2) 应用程序中,anOrder有很多LineItems. ALineItem有很多LineItemPayments。ALineItemPayment有一个Payment。(LineItems可能会支付多次(订阅),这就是我在那里有连接表的原因。)

我需要能够从付款记录中查询订单信息。我可以通过关系获得一系列订单,但我知道它们总是相同的订单。Rails 中有没有办法建立关联来反映这一点?如果不是,最好设置一种方法来检索数组,然后从中挑选订单,或者只是将其order_id与付款一起存储并建立一个直接关系来回避这一切?

4

1 回答 1

3

您需要使用订单集合并根据您自己的逻辑相应地缩小范围。尽管您当然“可以”将 order_id 直接添加到付款中,但这将使您的数据(作为缓存)非规范化,仅在您开始遇到查询中的性能瓶颈时才建议这样做 - 否则它会在数据完整性方面遇到麻烦:

class Payment < ActiveRecord::Base
  has_many :line_item_payments
  has_many :line_items, :through => :line_item_payments
  has_many :orders, :through => :line_items

  # use this to get the order quickly
  def order
    orders.first
  end

  # use this to narrow the scope on the query interface for additional modifications
  def single_order
    orders.limit(1)
  end
end

class LineItemPayment < ActiveRecord::Base
  belongs_to :line_item
  belongs_to :payment
end

class LineItem < ActiveRecord::Base
  belongs_to :order
  has_many :line_item_payments
end
于 2013-01-28T20:44:28.947 回答