嘗試使用:include它應該有很大的幫助,因爲它會從關聯的表中激發加載記錄。
User
has_many :tag_followings
has_many :tags, :through => :tag_followings, :include => [:article]
Article
has_many :tag_attachings
has_many :tags, :through => :tag_attachings, :include => [:user]
你的語句來檢索數據,可能看起來像:
User.find(1).tags.collect { |t| t.article.id }
從日誌中的執行/ development.log應該去從:
User Load (0.3ms) SELECT users.* FROM users WHERE (users.id = 1) LIMIT 1
Tag Load (1.2ms) SELECT tags.* FROM tags WHERE (users.tag_id =1)
Article Load (3.2ms) SELECT articles.* FROM articles WHERE (articles.tag_id = 1)
Article Load (3.2ms) SELECT articles.* FROM articles WHERE (articles.tag_id = 3)
Article Load (3.2ms) SELECT articles.* FROM articles WHERE (articles.tag_id = 7)
到:
User Load (0.3ms) SELECT users.* FROM users WHERE (users.id = 1) LIMIT 1
Tag Load (1.2ms) SELECT tags.* FROM tags WHERE (users.tag_id =1)
Article Load (3.2ms) SELECT articles.* FROM articles WHERE (articles.tag_id IN (1,3,7))
Hello Paul。偉大的組合!感謝您介紹我急切的加載!當我運行@articles = User.find(1).topics.map {| t | t.articles}輸出結果與我運行@articles = Article.find(all)時不一樣。在控制檯上檢查後,我發現你的解決方案的輸出有一個括號:[[#]]和原始文件: [#]。你有任何想法如何克服,因爲我的部分無法呈現新的變量:未定義的方法`model_name'的陣列:類 –
Sharethefun
2011-01-28 05:45:15