cycle(...) - is there some sort of only_first_time(...)?

Just write one:

in a helper:
   def only_first_time(what)
     first_time = @previous_what.nil?
     @previous_what ||= what
     what if first_time
   end

in a view:
<ol>
   <% 5.times do |i| -%>
     <li>say <%= only_first_time('once') %></li>
   <% end -%>
</ol>

the resulting HTML:
<ol>
  <li>say once</li>
  <li>say </li>
  </ol>

-Rob
Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

Just write one:

in a helper:
   def only_first_time(what)
     first_time = @previous_what.nil?
     @previous_what ||= what
     what if first_time
   end

Thanks, but that's not very versatile. I could only use it once. AFAIK I
can use cycle() wherever I want, so I'd like the helper to be somehow
dependant from where it has been called. Is this possible?

Thanks

It might be instructive to look at the code for the cycle method. It actually creates an object and calls its to_s method each time you call ‘cycle’.

You could do a similar thing. Create a small class with a ‘to_s’ method that returns something the first time, but nothing thereafter.

class Once
def initialize(first_value)
@value = first_value
end

def reset
@value = ‘’
end

def to_s
value = @value
reset
return value
end

end

Stick that in lib/ or include it some other way. Then you can call cycle, but pass your object as a single argument to cycle (cycle doesn’t require actually more than one param, though you could pass your object as both params, or just pass it as the first param and ‘’ as the second):

<% label_once = Once.new(’_bar’) %>

You’ll get

... ...

Might be a bit overkill, but kind of fun. :slight_smile:

I would prefer to use each_with_index:

@records.each_with_index do |r, i|
  "first record: #{r.name}" if i == 0
  "just another record: #{r.name}"
end