如果您想要一个数据库中的所有数据,那么您必须对其进行过滤,这样您就走在了正确的轨道上。这完全没问题,因为无论如何都会过滤数据,所以这没什么大不了的。此外,您所描述的听起来非常类似于将数据标记为已存档(当前季节中没有的任何内容基本上都已存档),这是非常常见的事情,并且通常通过在每条记录上设置一个布尔标志来完成(我相信) true 或 false 以隐藏它,或一些等效的方法。
您可能需要 a scope
ordefault_scope
,其中 a 的主要缺点default_scope
是您必须.unscoped
在要访问当前季节之外的所有数据的地方使用,而不使用默认范围意味着您必须在每次调用时指定范围。默认范围似乎有时也会应用在有趣的地方,根据我的经验,我更喜欢总是明确说明我正在使用的范围(即我因此从不使用default_scope
),但这更多是个人喜好。
在如何设计数据库方面,您可以为每条记录添加布尔标志,以告知该数据是否在当前季节,或者如您所述,您可以包含一个season_id
将根据当前季节 ID 和过滤器进行检查的就这样。无论哪种方式,某种范围都是一种很好的方法。
如果使用简单的布尔值,那么在当前赛季结束或新赛季开始时,您必须将任何当前赛季记录标记为不再是当前的。这可能需要一个 rake 任务或类似的东西来使其方便,但会增加少量维护。
如果在代码中使用season_id
加号常量来指示当前的季节(可能通过配置文件),则将事物标记为当前季节会更容易,因为每个季节都不需要数据库更新。