Re: [問題] 問關於 has_and_belongs_to_many 的問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):