Arrays: map & each_with_index
在跑陣列(array) for-each 每一個 interation 可以帶上相對應的 index,利用 each_with_index 這個方法:
['a', 'b', 'c'].each_with_index do { |item, index|
puts "#{index}-#{item}"
}
當然,我們也可以利用 index 對應到的 element 組成一個新的 object:
['a', 'b', 'c'].each_with_index.map { |item, index|
{ :letter => item,
:position => index }
}
View: cycle is no even odd###
在網頁設計上,常為了讓表格內容更容易被閱讀,讓表格每行的顏色交錯,像是:
正常寫法:
<% an_array.each_with_index do |element, index| %>
<tr class="<%= index.odd? ? 'odd' : 'even' %>">
<td>...</td>
</tr>
<% end %>
在 Rails 有提供一個很棒的 helper 函式 cycle:
<% an_array.each do |item| %>
<tr class="<%= cycle('odd','even') %>">
<td>...</td>
</tr>
<% end %>
更多 cycle 用法可參考文件。
try
這是 Ruby 語法中最讓我驚艷不已的一個...省掉超級多行。原先為避免對 nil 呼叫產生錯誤,會這樣寫:
if @person.present? && @person.a_property == 'foo'
..
end
或
<% if @an_array.present? %>
<% @an_array.each do |item| %>
...
<% end %>
<% end %>
學會 try 之後可以這樣寫:
if @person.try(:a_property) == 'foo'
...
end
和
<% @an_array.try(:each) do |item| %>
...
<% end %>