Rails裡頭很多外掛都叫做acts_as_xxx之類的,例如你的Model取名為Book的話,掛上acts_as_taggable就變成”可以加Tag的書”了。我真的愛死這種直覺又有效率的方式。
關於Acts as Taggable的安裝,網路上可以找到很多中、英文的說明文件,這裡不多描述,只要別打錯字就好。
以下是一些注意事項和偷懶的方式:
1. 如果你的開發環境還在跑,而去安裝Acts as Taggable外掛時,要記得按Ctrl+C,然後script/server重新啟動。這樣才吃的到外掛幫我們設好的Relation以及新的Method。
2. 裝好第一件事情就是在你的Model宣告下方加上acts_as_taggable,把Model跟Tags, Taggings兩個Table之間的關係建立起來。
3. 在你剛剛宣告acts_as_taggable的下方,加上alias :tag_list= :tag_with,像這樣:
class Book < ActiveRecord::Base
acts_as_taggable
alias :tag_list= :tag_with
def author_names
self.authors.map{|a| a.name}.join(', ')
end
endalias的意思是說,把tag_with動態改名為tag_list=,於是取Tag的方法是tag_list;設Tag的方法是tag_list=,這樣是不是比較直覺一點??
這裡應該有體會到Ruby是動態語言的好處了吧?如果不是動態語言的話,可能很難隨時改變物件的操作方法。
搞不好要去修改外掛Source Code、重新Compile、重新打包Jar檔、搞不好還要改煩人的XML檔案,然後重新把檔案送上Tomcat,還要重新啟動Tomcat。
光這樣一個小動作的手續,我絕對相信Ruby/ Rails的開發效率是其他語言的10倍以上。
4. 接著在new, edit相關的View檔案加入要輸入Tag的text_field:
<label for="book_tags">Tags: </label> <%= text_field :book, :tag_list %>如果有list相關view,則加入:
<%= "#{book.tag_list}" %>以上。
除非你要做特殊的處理,不然Controller完全不用更動。
拜alias之賜,原來寫好的程式都不用修改,可以照常運作無誤:
@book = Book.new params[:book] @book.save前後不到3分鐘,很快就完成Web 2.0的Tag功能。
