簡體   English   中英

Rails4:為什么每次編輯模型范圍時都需要重新啟動控制台?

[英]Rails4 : Why do I need to restart console each time I edit Model Scope?

我有一個Rails應用程序,並且有一個Order Model,它具有今天的范圍,可以查詢今天創建的所有訂單。

app / models / 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 Console。

為什么會發生這種行為?,讓我懷疑它會在生產時影響應用程序的性能或行為。

還讓我認為將這個范圍划分為兩個范圍然后使用范圍鏈對應用程序性能更好嗎?

您可以使用reload! 注意,它不會更新任何現有對象。 因此,如果您已經做過:

foo = Foo.find_by(id: 12)

然后,同時reload! 將重新加載類的定義,您擁有的實例將不會更改。 您需要獲取該對象的新實例。

因此,更清楚一點,請使用reload! 在控制台中重新加載模型定義,然后獲取foo對象的新實例以查看屬性和/或行為的變化。

首先讓我回答為什么會這樣。 在開發環境中,您啟用了spring,它可以重新加載更改並使Web服務器反映這些更改。 但是,當您運行控制台時,您並沒有運行Web服務器,而只是在運行控制台,因此您每次都需要重新加載控制台以進行任何更改。

其次,僅因為它沒有重新加載並不意味着您的代碼效率較低。 我相信您處於開發的早期階段,應優先考慮可讀性和可維護性。 從這個角度來看,您的代碼對我來說似乎還不錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM