我有一个rails应用程序,我有一个订单模型,今天有范围查询今天创建的所有订单。
应用程序/模型/ order.rb
scope :today, -> { where("created_at >= ?", Time.current.in_time_zone("Zone").beginning_of_day) }
并且它在控制台中工作正常,直到我决定在此范围中添加一些功能并对其进行编辑...
scope :today, -> { where("shift_id = ? AND created_at >= ?", 1, Time.current.in_time_zone("Zone").beginning_of_day) }
并保存然后当我返回到控制台测试此编辑时,控制台一直给我与编辑前相同的结果。直到我重新启动Rails控制台。
为什么会出现这种情况?它让我怀疑它会影响应用程序在生产时的性能或行为。
另外,我认为应用程序性能将此范围拆分为两个范围然后使用范围链会更好吗?
答案 0 :(得分:1)
您可以在控制台中使用reload!
,但需要注意的是它不会更新任何现有对象。所以如果你已经这样做了:
foo = Foo.find_by(id: 12)
然后,当reload!
将重新加载类的定义时,您手头的实例将不会更改。您需要获取该对象的新实例。
更清楚一点,在控制台中使用reload!
重新加载模型定义,然后获取foo对象的新实例,以查看属性和/或行为的变化。
答案 1 :(得分:0)
首先让我回答为什么会这样。在开发环境中,您启用了spring,可以重新加载更改并使Web服务器反映这些更改。但是,当您运行控制台时,您没有运行Web服务器而只是一个控制台,因此您需要每次都重新加载控制台以进行任何更改。
其次,仅仅因为它没有重新加载并不意味着你的代码效率较低。我相信您处于开发的早期阶段,可读性和可维护性应该是首要任务。从这个角度来看,你的代码对我来说似乎相当不错。