作者suomax (shadow)
看板Ruby
標題[問題] 問關於 has_and_belongs_to_many 的問題
時間Tue Oct 30 12:01:44 2007
環境:
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)
1F:推 janyfor:直接下SQL 我是這樣處理的 10/30 19:42
2F:推 godfat:有不支援嗎?手冊裡我有看到啊,不過是 :uniq => true 10/30 19:51
3F:→ godfat:用 set 不知道會不會比較快,可能要看量 10/30 20:05
4F:推 suomax:我所謂的不支援是 has_many :through 無法透過 HABTM 作用 10/30 20:23
6F:→ godfat:這好久以前的事了耶 @@ Milestone: 1.2.6; 現在是 1.15.5 10/30 20:50
7F:推 suomax:XD 可是我真的也出現跟這篇一樣的錯誤訊息 >"< 再試看看吧 10/30 21:05
8F:→ suomax:感謝~ 10/30 21:06