除了上⾯提到的局部樣版,View Helper 也是⽤來整理程式碼很常⽤的⼿法。其實平
常⼤家在寫的 link_to 、 image_tag 或是 form_for ,它都是⼀種 View
Helper。
雖然 View Helper 通常是寫在 View 的 HTML 標籤裡,但其實 View Helper 本⾝是標
準的 Ruby 程式碼,使⽤起來就跟在呼叫⼀般的 Ruby ⽅法⼀樣。
⾃定 View Helper
除了 Rails 內建的⽅法,有時候在專案中也會寫⼀些⾃⼰會⽤的⽅法,例如可能有⼀
段程式碼長這樣:
<tr>
<td>
<% if gender == 1 %>
男
<% elsif gender == 0 %>
女
15 Layout,Render 與 View Helper
235
<% else %>
不想說
<% end %>
</td>
</tr>
當 gender 的值是 1 的時候印出 男 ,是 0 的時候就印出 女 ,不然就印出 不
想說 。雖然像這樣的寫法很簡單也很直覺,但這樣就會讓 View 開始有⼀些邏輯判
斷了,這不是好事。View 的主要⽤途是輸出結果在畫⾯上,所以邏輯判斷越少越
好。像上⾯這個例⼦,我們就可以把這段 if .. else .. 判斷,搬到 View
Helper 裡放著。
View Helper 主要是放在 app/helpers ⽬錄裡。要寫在哪個檔案裡都可以(因為
所有的 View Helper 都可以被 Rails 載入),但通常會放在跟功能有關的檔案裡。這
裡我就先把 Helper 寫在 app/helpers/application_helper.rb 裡⾯:
module ApplicationHelper
def user_gender(gender)
if gender == 1
"男"
elsif gender == 0
"女"
else
"不想說"
end
end
end
View Helper 是定義在 Ruby 的模組(Module)裡,Rails 在啟動的時候會把這些
View Helper 都載進來,讓⼤家在 View 可以直接使⽤。在上⾯這個例⼦,我在
ApplicationHelper 這個模組裡定義了⼀個 user_gender ⽅法,⽽且這個⽅法
會接收⼀個參數,並根據參數的內容回傳「男」、「女」或「不想說」。有這個
View Helper 之後,原來在 View 的那段 if ... else ... 的邏輯判斷就可以改
成這樣:
<tr>
<td><%= user_gender(gender) %></td>
</tr>
適時的使⽤ View Helper 把需要邏輯判斷的部份抽出來,可以讓 View 的程式碼變得
乾淨⼜清楚。
View Helper 的使⽤規則
雖然 View Helper 的⽅法寫在 app/helpers ⽬錄下的隨便哪個檔案都可以,但檔
名以及模組名稱是有規則的:
[為你自己學Ruby on Rails]https://railsbook.tw/chapters/08-ruby-basic-4.html