2011-03-19 57 views
3

我們有一個我們剛開始開發的Rails3應用程序。我們在兩個模型之間使用has_and_belongs_to_many關係。每當我們使用這些模型的一個時間,ActiveRecord的執行對連接表一個DESCRIBE查詢,如:ActiveRecord爲與MySQL的has_and_belongs_to_many關係生成昂貴的DESCRIBE查詢

SQL (1.1ms) describe `articles_tags` 

這些查詢是比較昂貴的(即比實際SELECT查詢慢10倍以上)並且經常執行。它們對我來說似乎沒有必要:由於has_and_belongs_to_many關係,表格會自動生成,所以ActiveRecord應該已經知道它的結構(只是一個article_id和一個tag_id列)。

這種行爲是否有很好的理由?如果不是,我該如何阻止它發生?

回答

4

在開發模式中,服務器不斷重新創建所有類,因此您無需爲每次更改都重新啓動服務器。在生產中,你的模型將被緩存,不需要不斷地描述表格。在您的development.rb文件中,您將看到以下行:

config.cache_classes = false 

哪個驅動器出現這種情況。它應該在生產中設置爲true .rb

1

如果您的表沒有主鍵,它將在每個查詢上運行描述。我修復了我的主鍵。即使在開發模式下也能工作