Acts as Taggable

by winson, about 1 year ago.

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
end
alias的意思是說,把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功能。


  • Posted in Plugins, on Sunday, May 06, 2007, at 07:46 AM.