Frage zu ApplicationHelper

servus an die Liste,

habe folgendes Problem: auf der Startseite möchte ich so etwas wie
einen statischen Block mit Daten aus der Datenbank anzeigen.
Dazu habe ich einen Helper in app/helpers/application_helper.rb
angelegt:

def newsblock
termin = Treffen.find(:first)
termin.next
end

In app/views/layouts/application.rhtml rufe ich die Funktion auf.
Das funktioniert genau einmal, dann gibts nen Fehler a’la:
ActionView::TemplateError (A copy of ApplicationHelper has been… usw.
Einen simplen Text ausgeben geht ohne Probleme…

Was kann ich machen, damit das geht?
Bin ich mit meiner Vorgehensweise überhaupt auf dem richtigen Weg?
Die Suche in $ENGINE ergab keine zielführenden Ergebnisse…

Danke im Voraus
Torsten

Warum überhaupt in einen Helper (und nicht in den Controller der
Startseite)?

Zumindest der Teil “termin = Treffen.find(:first)” gehört meines
Erachtens
in eine Controller-Action:
@termin=Treffen.find(:first).

Grüße
Nicolai

On 19:29 Do 06 Mär, Codeblogger wrote:

Warum überhaupt in einen Helper (und nicht in den Controller der
Startseite)?

hmm, das ist IMHO nicht zielführend: der Startseitencontroller wird ja
auch nur, wie der Name schon sagt, beim Aufruf der Startseite
aufgerufen. Ich will aber, das der HTML-Block immer da steht.

Zumindest der Teil “termin = Treffen.find(:first)” gehört meines Erachtens
in eine Controller-Action:
@termin=Treffen.find(:first).

Ich meinte halt, das das in den ApplicationController gehört, dann
kann ich es im zugehörigen Layout verwenden.
Aber wie heißt die entsprechende Aktion? :slight_smile: Sowas wie
‘index’ oder ‘list’ gibts ja da nicht… - oder etwa doch?

Torsten

Du vermischst gerade ganz wild Helper & Controller. Außerdem hast Du uns
bisher die Info vorenthalten, dass der Block auf jede Seite soll. Im
Anfangspost hast Du nur von der Startseite gesprochen.

Grüße
Nicolai

On 20:01 Do 06 Mär, Codeblogger wrote:

Du vermischst gerade ganz wild Helper & Controller. Außerdem hast Du uns
bisher die Info vorenthalten, dass der Block auf jede Seite soll. Im
Anfangspost hast Du nur von der Startseite gesprochen.

unglücklich formuliert - zugegeben

Aber wie kann ich das umsetzen ohne den genannten Fehler zu provozieren?
Von meinem Verständnis her gehört so etwas in den ApplicationController,
denn der wird ja immer aufgerufen, wenn eine Seite angefordert wird.

Ich lasse mich da höchst gern eines Besseren belehren :slight_smile:

Torsten

Mit einem Before-Filter[1] in den ApplicationController.

Kurz angerissen:

class ApplicationController < ActionController::Base
before_filter :grab_news
def grab_news
@termin = Termin.find(:first)
end
end

Ich nehme mal an, next gibt Text oder ähnliches aus. Dann kannst Du
einen
ApplicationHelper schreiben, der ungefähr so aussieht:

module ApplicationHelper
def newsblock
@termin.next
end
end

In Deinem Template/View/Partial kannst Du dann wie gewohnt mit <%=h
newsblock %> darauf zugreifen. Das ganze geht auch noch mit Caching,
aber
probier’ es erstmal so…

Ich hoffe, das hilft Dir weiter.

Grüße,
Nicolai

[1]
http://api.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html#M000312

Am 06.03.08 schrieb Torsten F. [email protected]:

On 20:25 Do 06 Mär, Codeblogger wrote:

newsblock %> darauf zugreifen. Das ganze geht auch noch mit Caching, aber
probier’ es erstmal so…

Ich hoffe, das hilft Dir weiter.

das ist genau der (ausführliche) Denkanstoss! :slight_smile:
Danke! - so funktioniert es.

Torsten