Вы не сравниваете, то, что вы думаете, вы сравниваете:
<%= "," unless open_hours == open_hours.last %>
Вы сравниваете весь массив open_hours
с последним элементом того же массива open_hours.last
Вы, вероятно, хотели сравнить текущее время открытия, чтобы проверить, был ли это последний элемент:
<%= "," unless open == open_hours.last %>
Но в любом случае, есть гораздо более хороший способ сделать это, если у вас есть массив, вы можете просто соединить его вместе следующим образом:
<%= open_hours.map do |open| %>
<% I18n.l open.opens, :format => :custom %> -
<% I18n.l open.closes, :format => :custom %>
<% end.join(', ') %>
И, вероятно, для этого лучше написать какой-нибудь помощник или метод модели.