599377ad81f47da90d4e53662e0fdf76

一个话题有多个节点,这样的需求怎么操作

2012-08-09 16:44:35 +0800Kenn新手 節點 中發起
最後由 Kenn2012-08-11 08:55:52 +0800回應 , 345次閱讀

假设我在ruby-taiwan.org发布一个话题(topic),我希望这个话题出现在多个节点(node)里面,也就是说这个话题不仅出现在a节点,还可以出现在b节点。

这个数据库的关系应该是多对多吗?(数据库是MySQL)

希望有个实例可以看看。谢谢。

截至 2012-08-11 08:55:52 +0800,共收到 3 條回應
599377ad81f47da90d4e53662e0fdf76
Kenn 1樓, 於2012-08-09 21:07:30 +0800回應

想了一下,自己有了一些眉目,用many_to_many就可以实现。
现在碰到一个数据查询的问题。
我有3个表

- posts
- categories
- categorizations

categorizations就是中间表,里面自然有post_id和category_id
我在rails console里输入

Post.create(:title => "first post")
Category.create(:name => "hello")
Post.first.categories << Category.first

我现在要怎么通过Post.first找到Category.name或者Category.id

Post.first.categories

这样会得到所有的数据,我只想取category的id和name

009994c3985985809d2d644bd49aa1c2
lulalala 2樓, 於2012-08-10 09:47:19 +0800回應

第一種方式,資料庫層還是會全部資料抓出來,所以沒有比較有效率:

Post.first.categories.map{|c| [c.id, c.name]}

第二種方式,只會抓這兩個欄位,但是抓出來的 model 會是唯讀的:

Post.first.categories.select("categories.id, categories.name")

我覺得不太需要作這種迷你的最佳化就是了。

599377ad81f47da90d4e53662e0fdf76
Kenn 3樓, 於2012-08-11 08:55:52 +0800回應

#2樓 @lulalala 谢谢。我后来都抓出来了,我之前用的是each,后来改成collect就抓出来了,看了你写的,我又很多的收获。

需要 登入 後方可回應,如果你還沒有帳號按這裡 註冊