Hi there, I''m having some trouble working out where/when I can define template variables. I have a standard.rhtml layout template which is used across the application as the main xhtml wrapper. Inside there is some code like this: <div id="<%= @layout_style %>"> <%= @content_for_layout %> </div> Now content_for_layout always works fine, but @layout_style seems to only work if I set it either within a method in a specific controller thus: @layout_style = ''content'' or when I define it at the top of the appropriate @content_for_layout template thus: <% @layout_style = ''index'' %> I was hoping that I would be able to set variables such as this globally within the application.rb controller. Or, am I just going about this in completely the wrong way :) ? I am also having trouble writing (what I think are called) overload methods within the model. I have a TIME column named running_time in my Film model and I only ever want it to look like this e.g.: ''5:32'' rather than the fully rendered datetime that is returned by default. So I define a method in the model to override the default: def running_time # strftime code here end but whenever I try and reference the value of running_time from withing the method I get a stack overload. What would be the best way to do what I initially though should be done like this: self.running_time.strftime("%M:%S") ? It''s taking me a while to get the idioms and the heuristics for RoR... Thanks in advance for any help available! dorian -- I do things for love or money -- +44 (0)7941 219 501 -- aim:oulalipo | yahoo:tachekent
I would create multiple layouts (put them in app/views/layouts/???.rhtml), and set them in the controller: class TestController < ApplicationController layout ''content'' end would use content.rhtml. Maybe: def running_time super.strftime("%M:%S") end or: def running_time read_attribute(:running_time).strftime("%M:%S") end Jules -- Posted via http://www.ruby-forum.com/.
Thanks for that,> I would create multiple layouts (put them in > app/views/layouts/???.rhtml), and set them in the controller: > > class TestController < ApplicationController > layout ''content'' > end > > would use content.rhtml.I understand that bit, but the layout is so similar that it seems a bit unnecessary and against the whole DRY principle to repeat it. I know I can use partials but I need foolproof access to the main display template.> Maybe: > > def running_time > super.strftime("%M:%S") > end > > or: > > def running_time > read_attribute(:running_time).strftime("%M:%S") > endactually I sorted it by using: self[:running_time].strftime("%M:%S") is that bad?> Jules >thanks again dorian -- I do things for love or money -- +44 (0)7941 219 501 -- aim:oulalipo | yahoo:tachekent
Dorian Mcfarland wrote:> but whenever I try and reference the value of running_time from withing > the method I get a stack overload. > What would be the best way to do what I initially though should be done > like this: > > self.running_time.strftime("%M:%S") >I think you need to create an alias to the original method. alias :old_running_time :running_time def running_time self.send(:old_running_time).strftime("%M:%S") end That way it won''t try to keep calling itself. _Kevin -- Posted via http://www.ruby-forum.com/.