ผมแอดคอลัมภ์เพิ่มใน table Tag ชื่อ user_id ทีนี้ผมจะต้องการเพิ่ม user_id ไปด้วยระหว่างที่แอด tag แต่ผมหาวิธีไม่เจอครับ
@person.tag_list.add(params[:tag][:name])
ตรงนี้จะแอด ได้แต่ name แอดอย่างอื่นไม่ได้ครับ
http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids
plug-in ตัวนี้น่ะครับ
อ่า ... อันนี้คือจะดูว่า tag อันนี้เป็นของใครหรือครับ? :)
ปกติแล้ว acts_as_taggable นี่ผมไม่ค่อยไปโมมันครับ ส่วนใหญ่ที่ทำถ้าอยากรู้ว่าคนๆ นี้เคยไปโพสอะไรบ้าง (สมมุติว่าผมติด acts_as_taggable ที่ Post ละกันนะครับ) ผมจะใช้วิธี
acts_as_taggable
Post
@tags_by_user = Tag.all(:conditions => ["taggings.taggable_id IN (?) AND taggings.taggable_type = 'Post'", @user.post_ids], :joins => :taggings)
(โค้ดถูกหรือเปล่าไม่แน่ใจ ลองเทสแล้วแก้ดูนะครับ)
หรือถ้าอยากแก้ที่ taggables จริงๆ ก็ลองแกะจาก source ได้ครับ แล้ว override เอา :) แต่ผมคิดว่ามันทำให้ตัว plugin ไม่ atomic ถ้ามีการอัพเกรดครับ :)
บล็อกของผม: http://sikachu.com
Database เป็นแบบนี้ครับ
Tag
id | name | user_id
Taggable
ใน taggings จะประกอบด้วย
id,tag_id,taggable_id,taggable_type,created_at
เฃ่น
44,59,1938,Person,2009-09-03 10:41:10
ใน tags จะมี
id,name,user_id => 59,example,42/null ค่าของ user_id เป็นค่าที่มาจาก session[:user_id] Tags ในโปรแกรมผมจะแบ่งเป็น แท็คส่วนกลาง กับ แท็คส่วนบุคคล แท็กส่วนกลางนั้นผู้ใช้ทุกคนจะใฃ้ร่วมกันใน Taggable_id นึง ๆ แต่ Tags ส่วนบุคคลนั้นผู้ใช้แต่ละคนจะแตกต่างกัน
อย่างนี้ต้อง override acts_as_taggable แล้วล่ะครับ ในส่วนของการเพิ่ม tag association เพราะคิดว่าใน plugin คงทำให้มัน support เฉพาะ global tag เท่านั้น
ลองไล่ดู source code แล้ว override ดูครับ แต่ถ้าไม่ได้จริงๆ เข้ามาบอกนะครับ เดี๋ยวผมช่วย ... แต่อยากให้ลองทำดูก่อน ;)
ได้แล้วครับ พี่ที่ทำงานช่วยกันหาวิธีให้ >___< แต่มันซับซ้อนเกินระดับฝีมือของผมมากเลย ขอบคุณพี่ ซิกาชู มากครับ ที่มาช่วยดู
http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids
plug-in ตัวนี้น่ะครับ
อ่า ... อันนี้คือจะดูว่า tag อันนี้เป็นของใครหรือครับ? :)
ปกติแล้ว acts_as_taggable นี่ผมไม่ค่อยไปโมมันครับ ส่วนใหญ่ที่ทำถ้าอยากรู้ว่าคนๆ นี้เคยไปโพสอะไรบ้าง (สมมุติว่าผมติด
acts_as_taggable
ที่Post
ละกันนะครับ) ผมจะใช้วิธี@tags_by_user = Tag.all(:conditions => ["taggings.taggable_id IN (?) AND taggings.taggable_type = 'Post'", @user.post_ids], :joins => :taggings)
(โค้ดถูกหรือเปล่าไม่แน่ใจ ลองเทสแล้วแก้ดูนะครับ)
หรือถ้าอยากแก้ที่ taggables จริงๆ ก็ลองแกะจาก source ได้ครับ แล้ว override เอา :) แต่ผมคิดว่ามันทำให้ตัว plugin ไม่ atomic ถ้ามีการอัพเกรดครับ :)
บล็อกของผม: http://sikachu.com
บล็อกของผม: http://sikachu.com
Database เป็นแบบนี้ครับ
Tag
id | name | user_id
Taggable
ใน taggings จะประกอบด้วย
id,tag_id,taggable_id,taggable_type,created_at
เฃ่น
44,59,1938,Person,2009-09-03 10:41:10
ใน tags จะมี
id,name,user_id => 59,example,42/null
ค่าของ user_id เป็นค่าที่มาจาก session[:user_id]
Tags ในโปรแกรมผมจะแบ่งเป็น แท็คส่วนกลาง กับ แท็คส่วนบุคคล
แท็กส่วนกลางนั้นผู้ใช้ทุกคนจะใฃ้ร่วมกันใน Taggable_id นึง ๆ
แต่ Tags ส่วนบุคคลนั้นผู้ใช้แต่ละคนจะแตกต่างกัน
อย่างนี้ต้อง override acts_as_taggable แล้วล่ะครับ ในส่วนของการเพิ่ม tag association เพราะคิดว่าใน plugin คงทำให้มัน support เฉพาะ global tag เท่านั้น
ลองไล่ดู source code แล้ว override ดูครับ แต่ถ้าไม่ได้จริงๆ เข้ามาบอกนะครับ เดี๋ยวผมช่วย ... แต่อยากให้ลองทำดูก่อน ;)
บล็อกของผม: http://sikachu.com
บล็อกของผม: http://sikachu.com
ได้แล้วครับ พี่ที่ทำงานช่วยกันหาวิธีให้ >___<
แต่มันซับซ้อนเกินระดับฝีมือของผมมากเลย
ขอบคุณพี่ ซิกาชู มากครับ ที่มาช่วยดู