2016-08-22 21 views
0

我有一個rails應用程序,我有一個訂單模型,今天有範圍查詢所有今天創建的訂單。Rails4:爲什麼每次編輯模型範圍時都需要重新啓動控制檯?

應用程序/模型/ 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

回覆:性能鏈的性能較差,但更重要的是,它對可維護性進行了優化,這更加昂貴。你幾乎總是應該做些更容易改變,測試和理解的事情。 – coreyward

回答

1

您可以在控制檯中使用reload!,但需要注意的是它不會更新任何現有對象。所以,如果你已經做了:

foo = Foo.find_by(id: 12) 

然後同時reload!將刷新類的定義,你手上有實例不會被改變。您需要獲取該對象的新實例。

所以要更清楚一些,在控制檯中使用reload!重新加載模型定義,但是然後獲取foo對象的新實例以查看屬性和/或行爲的更改。

0

首先讓我回答爲什麼發生這種情況。在開發環境中,您啓用了spring,它會重新加載更改並使Web服務器反映它們。但是,當您運行控制檯時,您沒有運行Web服務器而僅僅是一個控制檯,因此您需要每次重新加載控制檯以進行任何更改。其次,僅僅因爲它沒有重新加載並不意味着你的代碼效率不高。我相信你處於開發的早期階段,可讀性和可維護性應該成爲重中之重。從這個角度來看,你的代碼對我來說似乎相當不錯。

相關問題