Hi all
The cycle() method is very handy in views. But is there some sort of
only_first_time() that returns the passed value only the first time it
is invoked within a view?
Thanks for help
Josh
Hi all
The cycle() method is very handy in views. But is there some sort of
only_first_time() that returns the passed value only the first time it
is invoked within a view?
Thanks for help
Josh
On Apr 19, 2009, at 5:51 PM, Joshua M. wrote:
Hi all
The cycle() method is very handy in views. But is there some sort of
only_first_time() that returns the passed value only the first time it
is invoked within a view?Thanks for help
Josh
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:
the resulting HTML:
-Rob
Rob B. http://agileconsultingllc.com
[email protected]
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
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
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.
On Sun, Apr 19, 2009 at 5:52 PM, Joshua M. <
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs