作者isfore (Midnight Blue)
看板Ruby
标题Re: [问题] 问关於 has_and_belongs_to_many 的问题
时间Fri Nov 23 01:21:23 2007
※ 引述《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