一个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
时,它会执行查询。这是真的吗?
呀谢谢,我只是种想通了,这可能是延迟抓取,因为我没有使用之前的数据,以检测。但是当我使用它时,这个“额外的查询”消失了,谢谢:) –