在我的Rails(3.2)应用中,Order
有很多LineItems
。 LineItem
有很多LineItemPayments
。 LineItemPayment
只有一个Payment
。 (LineItems
可能会多次支付(订阅),这就是我在那里有联接表的原因。)
我需要能够从付款记录中查询订单信息。我可以通过关系获得一系列订单,但我知道它们将始终是相同的订单。 Rails中有没有办法设置关联以反映这一点?如果没有,最好是设置一个方法来检索数组,然后从中选择顺序,或者只是将order_id
与付款一起存储并建立一个避开所有这一切的直接关系?
答案 0 :(得分: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