一個int數組上執行detect
時,它的工作原理:Rails - 如何在執行檢測方法時避免使用數據庫?
@number = [1,2,3,4,5,6,7].detect{|n| n == 4}
可變@number
變爲4
但是,當我做這樣的事情:
@categories = Category.all
@current_category = @categories.detect{|cat| cat.id == params[:category]}
方案產出
Category Load (0.2ms) SELECT "categories".* FROM "categories"
這意味着它使用數據庫來找到它。
不過,我試圖找到元素已經收集@categories
中,我只是想找到它把它分配給一個變量。
當然,另一個解決辦法是實現一個線性搜索算法,但我只是想保持代碼儘可能乾淨。
如何避免使用數據庫本次搜索的?
編輯:我只是意識到,這可能是懶取材。因爲在detect
之前,我從來沒有使用@categories
,所以當我做detect
時,它會執行查詢。這是真的嗎?
呀謝謝,我只是種想通了,這可能是延遲抓取,因爲我沒有使用之前的數據,以檢測。但是當我使用它時,這個「額外的查詢」消失了,謝謝:) –