Hallo zusammen!
Ich sehe warscheinlich den Wald vor lauter Bäumen nicht.
Ich habe ein paar Actions, die via Ajax aufgerufen werden. Sollte da
jeweils etwas geschehen, möchte ich die Warnungen aus dem flash
ausgeben. Also habe ich eine kleine Methode geschrieben, mit der ich das
nicht immer neu machen muss.
Ich bekomme jetzt, wo ich diese Methode aufrufen will, einen Fehler. Ich
hab das ganze mal in eine einfachste Controller-Klasse zusammengestellt;
class TestController < ApplicationController
def index
render :update do |page|
update_flash(page)
end
end
private
def update_flash(page)
page.update_html ‘flash_notice’, flash[:notice]
end
end
Wenn ich das aufrufe, bekomme ich:
NoMethodError (undefined method update_flash' for #<#<Class:0xb690aa04>:0xb690a9c8>): ../app/controllers/test_controller.rb:5:in
__bind_1192300516_37101’
Der Block im Render wird also nicht innerhalb des Controller-Scopes
ausgeführt (was ich dachte, es sei so), sondern in irgendeiner anderen
Klasse. Gibt’s da eine Möglichkeit, dass das irgendwie funktioniert!?
Gruesse, Rainer
Hallo Rainer,
probier’s mal folgendermaßen:
module ApplicationHelper
def update_flash
page.update_html ‘flash_notice’, flash[:notice]
end
end
class TestController < ApplicationController
def index
render :update do |page|
page.update_flash
end
end
end
Der ApplicationHelper wird nämlich auch in den JavaScriptGenerator gemixt
und dieser ist wiederum intern direkt über #page refernzierbar (damit klar
ist, dass die Methode #update_flash halt für den Gebrauch im
JavaScriptGenerator gedacht ist). Klappt das?
Beste
GrüßeMoritz
Hallo Rainer,
probier’s mal folgendermaßen:
module ApplicationHelper
def update_flash
page.update_html ‘flash_notice’, flash[:notice]
end
end
class TestController < ApplicationController
def index
render :update do |page|
page.update_flash
end
end
end
Der ApplicationHelper wird nämlich auch in den JavaScriptGenerator gemixt
und dieser ist wiederum intern direkt über #page refernzierbar (damit klar
ist, dass die Methode #update_flash halt für den Gebrauch im
JavaScriptGenerator gedacht ist). Klappt das?
Beste
GrüßeMoritz
Sers, Moritz!
probier’s mal folgendermaßen:
module ApplicationHelper […] end
[…]
Der ApplicationHelper wird nämlich auch in den JavaScriptGenerator
gemixt und dieser ist wiederum intern direkt über #page refernzierbar
Ok, das funktioniert, die Methoden über den Helper einbinden.
Aber es wundert mich einfach, wie der Block ausgeführt wird.
Nunja, so ist es wohl einfach.
Danke für die Hilfe,
Rainer
Tag Rainer,
Aber es wundert mich einfach, wie der Block ausgeführt wird.
das kannst du auf zwei Arten herausfinden: Entweder setzt du mal 'nen
Debugger in den Block und guckst oder gehst kurz in dich und kommst zu
der Erkenntnis, dass der Updateblock ja ein Äquivalent zu einem
RJS-Template darstellt, d.h. er wird innerhalb View-Scopes ausgeführt (also
zeitverzögert in einem anderen Kontext mittels block.call statt unmittelbar
mittels yield). Darum kann deine Controllermethode innerhalb des Blocks
nicht aufgerufen werden (es sei denn du stellst sie über einen Aufruf von
#helper_method als View-Helper zur Verfügung). Alle Klarheiten beseitigt?
Schönen Sonntag allerseits wünscht
Moritz