看板 Ruby 關於我們 聯絡資訊
環境: Ruby 1.8.5 / Rails 1.2.3 狀況: 系統裡面有三個 model Diary, Tag, User 其中 Diary 與 Tag 是 many-to-many 關係 class Diary < ActiveRecord::Base has_and_belongs_to_many :tags belongs_to :user end class Tag < ActiveRecord::Base has_and_belongs_to_many :diaries end 現在我想不重複地列出某個 @user 用過的所有 Tags 由於 association 目前似乎不支援 HABTM,沒辦法像這樣定義 User 與 Tag 間 的 has_many :through 關係: # Model class User < ActiveRecord::Base has_many :diaries # has_many :tags :through => :diaries, :unique => true #尚未支援 end # Controller ... @tags = @user.tags 所以我現在的作法是這樣 # Controller @tags = Array.new @user.diaries.each { |diary| @tags |= diary.tags } 是可以 work,但有點醜,且好像還有最佳化的空間。 不知道有沒有更好的作法呢?可以直接用 find_by_sql 下 SQL 指令嗎? 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.49.253 ※ 編輯: suomax 來自: 210.69.49.253 (10/30 13:05)
janyfor:直接下SQL 我是這樣處理的 10/30 19:42
godfat:有不支援嗎?手冊裡我有看到啊,不過是 :uniq => true 10/30 19:51
godfat:用 set 不知道會不會比較快,可能要看量 10/30 20:05
suomax:我所謂的不支援是 has_many :through 無法透過 HABTM 作用 10/30 20:23
suomax:在 http://dev.rubyonrails.org/ticket/4376 看到的 @@ 10/30 20:34
godfat:這好久以前的事了耶 @@ Milestone: 1.2.6; 現在是 1.15.5 10/30 20:50
suomax:XD 可是我真的也出現跟這篇一樣的錯誤訊息 >"< 再試看看吧 10/30 21:05
suomax:感謝~ 10/30 21:06