作者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