我能够得到符合我想要的东西的最简单的方法是添加新的存储库。
Datamapper.setup(:default), <Insert database connection url>
DataMapper.setup(:onemonth), <Insert the same database url>
Datamapper.setup(:oneyear), <Insert the same database url>
在模型类中,
class Klass
storage_name[:default] = "table"
storage_name[:onemonth] = "table_1_month"
storage_name[:oneyear] = "table_1_year"
# Psuedocode
def get_from_timeperiod(start_time, end_time)
time_one_year_ago = <some other int>
time_one_month_ago = <some int>
if end_time < time_one_month_ago
DataMapper.repository(:onemonth) { self.all( self.updated => (start_time..end_time) ) }
elif end_time < time_one_year_ago
DataMapper.repository(:oneyear) { self.all( self.updated => (start_time..end_time) ) }
else
self.all( self.updated => (start_time..end_time) )
end
end
end
(更新 10/31 下午 6:13)我发现的另一种选择是使用直接数据库查询而不是 DataMapper.repository(:onemonth) { } ,这会导致结构对象:
repository(:default).adapter.select("SELECT * FROM table_one_month WHERE updated between #{start_time} and #{end_time}")
我个人觉得第一种方法更干净。
请让我知道是否有更好的办法!