從昨天專案過程延伸,菜鳥前端撞牆查詢資料過程中
曾經看到把方法寫在applicaction_helper.rb的檔案裡,對這樣得寫法感到黑人問號?
所以打算來了解關於Veiw的Helper。
Helper是一種輔助方法,在Rails裡面扮演分工的一角,用Ruby產生/整理HTML程式的一些小方法,目的來簡化view樣版裡面較為冗長且複雜的程式,便可以在view裡面直接使用。
Rails也提供很多內建的helper method,專案裡最常見到的不外乎就是就是link_to、form_for、stylesheet_link_tag、image_tag等等。
不管是Partial還是Helper,這兩種都是整理冗長且複雜view版面最的好工具。兩者分別的差異就在,Partial通常是去處理大段且重複的程式碼的工具。而Helper則是屬於需要邏輯性輸出HTML的時候,所使用的整理工具。
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的優點:
最近專案菜鳥小心得
前端可以無意識搞壞後端的功能啊(汗
每天一起debug的日子,真是辛苦同組得大家了XD