我正在使用Ruby on Rails,並且需要在我的一個html.erb文件中運行一段Ruby代碼塊。難道我不喜歡這樣寫道:如何在html.erb文件中運行多行Ruby
<% def name %>
<% name = username %>
<%= name %>
或像這樣:
<% def name
name = username %>
<%= name %>
感謝您的閱讀。
我正在使用Ruby on Rails,並且需要在我的一個html.erb文件中運行一段Ruby代碼塊。難道我不喜歡這樣寫道:如何在html.erb文件中運行多行Ruby
<% def name %>
<% name = username %>
<%= name %>
或像這樣:
<% def name
name = username %>
<%= name %>
感謝您的閱讀。
在ERB文件中定義方法並不常見,所以我建議不要這樣做。
如果你想調用像#each
塊,你可以這樣做以下:
<% names.each do |name| %>
<%= name %>
<% end %>
不要忘了<% end %>
。
,你在'| name'之後忘了'|';-) – jigfox 2010-06-23 08:18:45
如果您在視圖中需要額外的功能,您通常會在助手中聲明這些功能。
對於每個控制器,如果有助手,它會自動加載。舉例來說,如果你有一個把PeopleController,在app/helpers
文件夾中,應該有一個people_helper.rb
,它應該是這樣的
module PeopleHelper
def name
#do something
username
end
end
另外,很乾淨的替代,是使用Presenterpattern,但我認爲它不太常見(不幸)。
否則,如果你確實需要一個ERB視圖中的紅寶石多行代碼,我儘量避免,我寧願以下樣式:
<%
counter_1 = 0
counter_2 = 1
do_some_more_prep_here
%>
<% @records.each do |rec|%>
<%# do something with the prepped date in each row %>
<% end %>
對我來說也代碼縮進比HTML縮進更重要,所以我會喜歡這樣的東西
<table>
<% @rows.each do |row| %>
<tr>
<td><%= row.item1 %></td>
<% if row.some_test %>
<td><%= row.item2 %></td>
<% end %>
</tr>
<% end %>
</table>
但我總是很有興趣聽到在這個問題上的不同意見。
當然,輔助方法是最好的選擇。 – tadman 2010-06-23 14:22:09
我可以想象有人需要它在一個特定的模板(沒有點創建助手)不重複的HTML標記。也就是說,當生成的html頁面有幾個類似的html標記塊時。雖然,它很容易被濫用(不可讀的代碼)。
<% def f1(a, b, c) %>
test: <%= a %>, <%= b %>, <%= c %>
<% end %>
<% f1(1, 2, 3) %>
<% f1(4, 5, 6) %>
你爲什麼要在視圖中創建一個函數?它屬於最有可能進入模型,或者如果不進入控制器,但絕對不會進入視圖 – jigfox 2010-06-23 08:21:09
對不起,我只是在那裏快速鍵入一些代碼作爲例子。 – ben 2010-06-23 08:39:40