關于Rails中Helper方法中的開發
一、首先了解一下Helper方法:
1. helper方法就是方法;
2. 它大部分在view中應用,也可以做為普通方法使用在其它場景中;
3. 它可以寫在controller中,也可以寫在app/helper模塊中;
4. Rails框架提供了一些Helper方法,如:form_for、link_to等等;
5. 通過合理的將一些功能應用封閉成Helper方法,可以很大程度上簡化代碼量和維護成本,并且能完成一些統一性和風格方面的要求。
二、Helper方法的定義
1. 寫在controller中的場景
寫在控制器中的Helper方法,或者打算將控制器中的某個方法開放成Helper方法,以便在視圖中使用時,必須使用“helper_method :xxx”寫聲明;如下面示例:
helper_method :date_fmt
def date_fmt date
return date.strftime("%Y-%m-%d")
end
end
2. 寫在app/helper模塊中的場景
每個控制器都可以有一個對應的Helper模塊,它在app/helper目錄下,與控制器文件同名。
./app/helper/users.rb
def date_fmt date
return date.strftime("%Y-%m-%d")
end
end
三、Helper方法中視圖中的使用
Rails中的視圖與JSP一樣,屬于嵌入式程序代碼(這也是為什么擴展名為*.erb的意思),即它的內容可以是Html標簽與Ruby代碼的結合,
在視圖中可以編寫Ruby代碼(使用<%%>括起來),也可以編寫HTML標簽代碼。
1. 在Rails2.x中有個約定,視圖中所使用的Helper方法或Ruby代碼,調用過程中包含代碼塊(do..end之間的代碼集合就叫代碼塊)的,
無論是否有返回值,必須使用<% ... %>。如果不包含代碼塊并且打算將結果輸出到頁面的,使用<%= ... %>,這就是我們所看到
的<% form_for %>和<%= link_to %>啦!
2. 上述提到的問題在Rails3中得到了統一,那就是只要打算輸出到頁面,均使用<%= ... %>
./app/view/users/index.html.erb
<th>
<td>序號</td>
<td>姓名</td>
<td>部門</td>
<td>入職時間</td>
</th>
<% i = 1 %>
<% for user in @user %>
<tr>
<td><%= i %><td>
<td><%= user.name %><td>
<td><%= user.department.name %><td>
<td><%= date_fmt(user.in_date) %><td>
</tr>
<% end %>
</table>
四、如何編寫一個類似form_for的Helper方法(帶有代碼塊的)
其實很簡單,但這中間有幾個小秘&密,仔細看!
我們假設一個應用場景:將用戶傳入的Html標簽代碼括在一個<form>中,并將結果返回。
#with_output_buffer是rails提供的一個方法,它能夠執行代碼塊,并返回執行后的結果;
content = with_output_buffer(&block)
#concat也是rails提供的一個方法,它能夠將字符輸出到視圖的調用位置,這是秘&密一般人可不知道哦!
#不信的話,你也可以用return 返回,看看結果是不是你想要的!
concat("<form '#{url}'>")
concat(content)
concat("</form>")
end
<input ...>
<input ...>
<input type="commit">
<% end %>
好了,先說到這吧,有空繼續為你講述我理解中的Ruby on Rails!
浙公網安備 33010602011771號