Re: [問題] 問關於 has_and_belongs_to_many 的問題

看板Ruby作者 (Midnight Blue)時間17年前 (2007/11/23 01:21), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《suomax (shadow)》之銘言: : 環境: : 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 指令嗎? : 謝謝~ 我的環境是 Ruby 1.8.6 / Rails 1.1.6 tagging (relational table) - user_id - tag_id - diary_id class User < ActiveRecord::Base has_many :diaries has_and_belongs_to_many :tags, ...(自己補) end class Tag < ActiveRecord::Base has_and_belongs_to_many :diaries, ... has_and_belongs_to_many :tagger, ... end class Diary < ActiveRecord::Base belongs_to :user has_and_belongs_to_many :tags, ... end 好處是可以用 user.tags 直接達成你的要求,這方式也可以避免同一篇日誌 被同一使用者下同一tag,缺點我就不說了。 你可以參考 gem list 有 tag 相關的東西。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.164.78
文章代碼(AID): #17HRgK5E (Ruby)
文章代碼(AID): #17HRgK5E (Ruby)