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
on 2008-03-06 19:21
on 2008-03-06 19:30
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 2008-03-06 19:48
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? :-) Sowas wie 'index' oder 'list' gibts ja da nicht... - oder etwa doch? Torsten
on 2008-03-06 20:02
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 2008-03-06 20:16
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 :-) Torsten
on 2008-03-06 20:26
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 Flammiger <nospam@airpost.net>:
on 2008-03-06 20:34
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! :-) Danke! - so funktioniert es. Torsten
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.