我有三张桌子
prices
timestamp : datetime
unit_id : integer
price : decimal
sales
timestamp : datetime
unit_id : integer
price : decimal
schedules
timestamp : datetime
unit_id : integer
status : string
这些表不属于任何东西,因此 schedules_id 或其他键不起作用。我怎样才能利用 ActiveRecords 关系来获得类似的东西:
class Schedules
has_one :sale,
joins: "LEFT OUTER JOIN ( sales s )
ON ( s.timestamp = schedules.timestamp AND s.unit_id = schedules.unit_id")
has_one :price
...
end
那么我可以
Schedules.where(timestamp: Time.now).includes([:sales, :prices]).all
实际情况比上面的例子要复杂得多。该应用程序有数百个表。
使用连接有效,但会将属性/值放入计划对象中。
class Schedules
def self.prices
select("*").joins("LEFT OUTER JOIN ...")
end
end
以上将在将prices
字段加入时间表时起作用。
s = Schedules.prices.last # will have a price attribute
s.price
但理想的做法是在子对象中加入
s.price.price
s.sales.price