我们刚开始开发Rails3应用程序。我们在两个模型之间使用has_and_belongs_to_many关系。每次我们使用其中一个模型时,ActiveRecord就会在连接表上执行DESCRIBE查询,例如:
SQL (1.1ms) describe `articles_tags`
这些查询相对昂贵(也就是说,比实际的SELECT查询慢10倍以上)并且经常执行。它们对我来说似乎没有必要:因为has_and_belongs_to_many-relation而自动生成表,所以ActiveRecord应该已经知道它的结构(只是一个article_id和一个tag_id列)。
这种行为有充分的理由吗?如果没有,我该如何阻止它发生?
答案 0 :(得分:4)
在开发模式下,服务器会不断重新创建所有类,因此您无需为每次更改重新启动服务器。在生产中,您的模型将被缓存,不应该不断地描述表格。在您的development.rb文件中,您将看到以下行:
config.cache_classes = false
这会导致此行为。它应该在production.rb
中设置为true答案 1 :(得分:1)
如果您的表没有主键,它将在每个查询上运行describe。我修复了我添加主键的问题。即使在开发模式下也能正常工作。