I’d like to display a banner on every page. Ultimately I’ll be tweaking
which banner is displayed via different controllers but initially I’d
just like to set a single banner application wide and display it in my
“_header”, a partial I include in all layouts.
I’ve got a BannerAdvert model, simple. If I’m in my welcome controller
index action I can simply do,
@banner_url = BannerAdvert.first.url
in my _header partial (view) I display the url, works fine.
BUT - my header is called from other controllers, I don’t want to be
non-dry and repeat @banner_url = BannerAdvert.first.url all over the
place.
I’d like to set @banner_url = BannerAdvert.first.url application wide
for now - how do I do this, should be easy but I’m having a Friday
afternoon mental block! I thought application_controller and
application_helper, but putting the code in either of those two didn’t
work.
Please help cure my insanity, any inspiration really appreciated.
bingo bob wrote:
I'd like to display a banner on every page. Ultimately
I'll be tweaking
which banner is displayed via different controllers but initially I'd
just like to set a single banner application wide and display it in my
"_header", a partial I include in all layouts.
I’ve got a BannerAdvert model, simple. If I’m in my welcome controller
index action I can simply do,
@banner_url = BannerAdvert.first.url
in my _header partial (view) I display the url, works fine.
BUT - my header is called from other controllers, I don’t want to be
non-dry and repeat @banner_url = BannerAdvert.first.url all over the
place.
I’d like to set @banner_url = BannerAdvert.first.url application wide
for now - how do I do this, should be easy but I’m having a Friday
afternoon mental block! I thought application_controller and
application_helper, but putting the code in either of those two didn’t
work.
Please help cure my insanity, any inspiration really appreciated.
You could put the
@banner_url = BannerAdvert.. in you application_controller.rb.
Make it
a before_filter and then display it in your layout.
–
You received this message because you are subscribed to the Google
Groups “Ruby on Rails: Talk” group.
To post to this group, send email to
[email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
Aha !
“You could put the @banner_url = BannerAdvert… in you
application_controller.rb. Make it a before_filter.”
That’s the bit I missed then, I just stuck @banner_url =
BannerAdvert.first in the application_controller.rb, I need a
before_filter to call a method in that controller - that right ?
bingo bob wrote:
Aha !
“You could put the @banner_url = BannerAdvert… in you
application_controller.rb. Make it a before_filter.”
That’s the bit I missed then, I just stuck @banner_url =
BannerAdvert.first in the application_controller.rb, I need a
before_filter to call a method in that controller - that right ?
No; you could call it explicitly every time. But you usually wouldn’t
want to. 
Best,
Marnen Laibow-Koser
http://www.marnen.org
[email protected]
Making it a before_filter makes it so you won’t need to call the
method to set your banner every single time. It will be done before
any action is called.
Thanks to all, settled on this code in the end in case useful to anyone
else - further tips appreciated, works great though.
class ApplicationController < ActionController::Base
before_filter :grab_banner
def grab_banner
banner = BannerAdvert.first(:conditions => [ “published >= ?”, 1],
:order => “RAND()”)
if banner
@banner_url = banner.url
end
end
end
I realised “lightening bolt”, that for many thing I don’t actually NEED
an admin interface/scaffold - like in this case I just created a
BannerAdvert model and I CRUD the records directly with Sequel Pro.
Anyone comment on this approach - saves me hours and keeps the app
clean. Silly, simple tip - no more scaffolded code - except when it
helps me - feels like coming on to the next stage… :-).
On Sat, Jul 3, 2010 at 3:30 AM, bingo bob [email protected] wrote:
Thanks to all, settled on this code in the end in case useful to anyone
else - further tips appreciated
banner = BannerAdvert.first(:conditions => [ “published >= ?”, 1],
:order => “RAND()”)
Even if you’re currently only working with a single database, it might
be a good idea to abstract that last statement. Different DBs use a
different syntax, so for example I’d write that as
:order => RANDOM
where RANDOM is set in an initializer based on the DB actually being
used, e.g. http://pastie.org/1029327
I work in a lot of “mixed” environments, so that may be more useful to
me than most people, but…
FWIW,
Hassan S. ------------------------ [email protected]
twitter: @hassan