iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
1

從昨天專案過程延伸,菜鳥前端撞牆查詢資料過程中
曾經看到把方法寫在applicaction_helper.rb的檔案裡,對這樣得寫法感到黑人問號?
所以打算來了解關於Veiw的Helper。

什麼是Helper?

Helper是一種輔助方法,在Rails裡面扮演分工的一角,用Ruby產生/整理HTML程式的一些小方法,目的來簡化view樣版裡面較為冗長且複雜的程式,便可以在view裡面直接使用。
Rails也提供很多內建的helper method,專案裡最常見到的不外乎就是就是link_to、form_for、stylesheet_link_tag、image_tag等等。

Helper與Partial比較

不管是Partial還是Helper,這兩種都是整理冗長且複雜view版面最的好工具。兩者分別的差異就在,Partial通常是去處理大段且重複的程式碼的工具。而Helper則是屬於需要邏輯性輸出HTML的時候,所使用的整理工具。

自行定義View Helper

View Helper主要是放在app/helpers目錄裡,但沒有特別指定哪個檔案,因為只要是View Helper都可以被Rails成功載入,但通常會放在與功能相關的檔案裡。
用我昨日flash快閃訊息的主題,就可以在app/helpers/application_helper.rb寫上更多ruby邏輯

# app/helpers/application_helper.rb

module ApplicationHelper
  def flash_class(msg)
    case msg
      when :notice then "alert alert-info"
      when :success then "alert alert-success"    
      when :error then "alert alert-danger"
    end
  end
end

因為專案裡很多地方都有Flash快閃訊息,所以可以Partial這個Flash訊息app/views/layouts/_flash.html.erb

# app/views/layouts/_flash.html.erb

<% flash.each do |key, value| %>
  <div class="<%= flash_class(key) %> fade in">
    <a href="#" data-dismiss="alert" class="close">×</a>
      <%= value %>
  </div>
<% end %>

最後我只要在我的View的.erb檔案裡render出來,就完成了喔

# app/views/foods/index.erb

<%= render 'layouts/flash_messages' %>

從一長段邏輯判斷,到最後只需要render一行,這樣比較下來view畫面會乾淨多呀~

Helper優點

最後再來簡單說明一下Helper的優點:

  • 提供view樣版乾淨單純的HTML環境
  • 易於修改整裡程式碼

最近專案菜鳥小心得
前端可以無意識搞壞後端的功能啊(汗
每天一起debug的日子,真是辛苦同組得大家了XD


上一篇
Day23 | Flash快閃訊息
下一篇
Day25 | form_for vs. form_with
系列文
從色彩繽紛到只看亂碼日子,學程式從 Ruby 出發!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言