2011-01-21 47 views
0

我有一個可以「跟隨」一些標籤複雜的有源-關係積極關係的Rails聯接查詢多個關係表

User 
    has_many :tag_followings 
    has_many :tags, :through => :tag_followings 

然後,我有一些文章,還附上了一些標籤用戶模型。

Article 
    has_many :tag_attachings 
    has_many :tags, :through => :tag_attachings 

tag_attaching是加入一個具有領域表:USER_ID和TAG_ID 和tag_following是加入一個具有領域表:article_id的和TAG_ID

  • 我用豐富的多對多關係(連接表有一個id)

我試圖找到一個有效的方式找到文章有用戶正在下列標記。

最佳做法?

回答

1

嘗試使用: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)) 
+0

Hello Paul。偉大的組合!感謝您介紹我急切的加載!當我運行@articles = User.find(1).topics.map {| t | t.articles}輸出結果與我運行@articles = Article.find(all)時不一樣。在控制檯上檢查後,我發現你的解決方案的輸出有一個括號:[[#

]]和原始文件: [#
]。你有任何想法如何克服,因爲我的部分無法呈現新的變量:未定義的方法`model_name'的陣列:類 – Sharethefun 2011-01-28 05:45:15