web_coding

Ruby on rails 簡化 Code 的方法

以前用PHP寫一個專案時,寫久了就會知道這個功能會在哪個專案重複用到最多次,為了減少未來改寫程式時所花費的時間與重覆的動作,都會另外寫一個自定義的 Function 或是 Method 。

這次跟工讀生一同用Ruby on Rails 開發一個專案,身為 Ruby 初生之贖的我都會被以往寫 PHP 的習慣而被固定住,在自己尋找最佳的開發方式,是下了不少的工夫,好在的是上個星期參加 RubyConf Taiwan 2001 讓我學到不少好東西。

雖然 Rails 的架構很好,自定義 Method 的工作是在開發專案中最常見到的事情,因此當寫到一個需要將同樣的 Code 不斷的要 copy & past 我的程式碼潔癖就會開始發作。

如何在 Rails 中自定義 Method ?

我要定義的Code如下:

[cc lang=”ruby”]
def colorBR(str,val)
if val==0
return content_tag(:font ,str, :color => “red”)
end
if val==1
return content_tag(:font ,str, :color => “blue”)
end
end
[/cc]

在Rails專案下的 lib 目錄開一個新檔案,名為 colorBR.rb ,然後把上述的 Code 寫進去。之後一定要到 environment.rb 之中 require 進 colorBR.rb

[cc lang=”ruby”]require “colorBR.rb”[/cc]

記得請將你的 webserver 重開才能套用新的 code 進去。這樣子就可以在整個專案中使用你自定義的 Method 了。

其結果如下:

原先這麼多的code 看了就想要清

瘦code之前↑↑↑

經過由自定義的 Mothod 就可以簡化code

瘦code之後↑↑↑

若是只給Controller用,那丟ApplicationController那邊。若是整個都要用,就丟libs底下,然後在environment.rb內require 。

這是幹嘛用的?

這是拿來用顯示何時要用紅的,何時要用藍的,若不這樣做,你有100個欄位,如果要把這樣子的code
[cc lang=”ruby”]
content_tag(:font ,”拒絕”, :color => “red”)
content_tag(:font ,”允許”, :color => “blue”)
[/cc]
要做100次這樣copy & past 我會瘋掉 ~~~

Related Posts Plugin for WordPress, Blogger...

3 thoughts on “Ruby on rails 簡化 Code 的方法”

  1. 可以試試看這樣:

    def colorBR(str, val)
    color = “red”
    color = “blue” if val == 1
    concat content_tag(:font, str, {:color => color})
    end

    def colorBR(str, val)
    colors = %w”red blue”
    concat content_tag(:font, str, {:color => colors[val]})
    end

Leave a Reply