Wie rufen Sie eine Methode aus der Sicht in Schienen auf?

8

Sagen wir, ich habe das getan:

script / Controller zu Hause generieren

Und in der Heimat-Controller machte eine Methode ..

%Vor%

Wie würde ich diese Methode in index.html.erb nennen?

Beim Ruby-Lernen wurde nur gesagt, dass das washd.rb im Terminal laufen soll um den Code zu starten, den Sie in dieser Datei geschrieben haben. Nur neugierig wie das würde mit Schienen funktionieren.

    
Aaron 04.09.2009, 08:37
quelle

4 Antworten

16

Ich nehme an, Sie haben einen Rails-Server ausgeführt?

Theres zwei Möglichkeiten, zuerst konnten Sie eine Hilfsmethode in der Steuerung sagen, indem Sie:

%Vor%

in Ihrem Controller.

Alternativ wäre die bessere Lösung, Ihre say-Methode in die home_helper (?) .rb-Hilfsdatei zu verschieben.

Sie können dies aufrufen, indem Sie einfach & lt;% say% & gt; in Ihrer Sicht Datei.

Beachten Sie, dass ein puts genau das, was in Ihrer Zeichenkette ist, in STDOUT einträgt, nicht in Ihren Ansichten, wenn Sie nur ein wenig Text schreiben möchten, wäre es besser, wenn Sie nur eine Zeichenkette ausgeben und die Erb Ausgabemechanismus in Ihrer Sicht, zB

application_helper.rb

%Vor%

index.html.erb

%Vor%

puts ist sehr nützlich für Unit-Test-Debugging, wo Sie den Inhalt eines Objekts herausfinden möchten

%Vor%

Wenn Sie dagegen eine Ausgabe in das Protokoll wünschen, können Sie Folgendes tun:

%Vor%     
Omar Qureshi 04.09.2009, 08:57
quelle
3

Kurz gesagt: Sie tun das nicht.

Was Sie tun:
Sie rufen eine Aktion auf einem Controller auf. Für jede Aktion gibt es eine entsprechende Ansicht, z. "say.html.erb" im Verzeichnis views / home.
Um diese Aktion aufzurufen und ihre entsprechende Ansicht anzuzeigen, können Sie in Ihrer index.html.erb

etwas wie <%= link_to 'Say it', :controller => 'home', :action => 'say', :someadditionalparameter => 'foo' %> eingeben

Wenn Sie auf :someadditionalparameter in der Aktion say zugreifen wollten, würden Sie dies mit params[:someadditionalparameter] tun und würden in diesem Fall 'foo' erhalten.

    
mrueg 04.09.2009 08:57
quelle
1

Nun, die Ansicht ruft normalerweise nicht den Controller an - es geht anders herum, von dem, was ich weiß. Die Anfrage kommt herein, Rails analysiert die URL entsprechend Ihren Routen config / routes.rb und leitet die Anfrage an die entsprechende Aktion im entsprechenden Controller weiter. Standardmäßig liefert Rails eine Route für / controllername / aktionsname, so dass Sie diese für das einfache Herumspielen mit dem verwenden können, was Rails für Sie tut.

Nachdem der Controller ausgeführt wurde, rendert Rails automatisch die zugehörige Ansicht, die per Konvention denselben Namen wie ihre Aktion hat. Die automatisch genutzte Ansicht für Ihre "Say" -Aktion im Home-Controller finden Sie in Ihrer Verzeichnisstruktur unter app / views / home / say.html.erb. Sie können dieses automatische Rendering überschreiben, indem Sie in Ihrer Controller-Aktion render aufrufen, z. B. render :template => :index .

Und schließlich, wie Konstantinos sagte, müssen Sie den Server starten, bevor Sie in einem Webbrowser auf die Website zugreifen können. Es wird standardmäßig auf http://127.0.0.1:3000/ gesetzt. Um die Aktion des Heim-Controllers zu erreichen, gehen Sie zu http://127.0.0.1:3000/home/say .

    
Twisol 04.09.2009 08:59
quelle
0

Zunächst müssen Sie die Rails-Anwendung

ausführen

Sie tun dies, indem Sie von der Befehlszeile aus in Ihr App-Stammverzeichnis von rails gehen und

eingeben %Vor%

Öffnen Sie dann Ihren Browser und geben Sie http://127.0.0.1:3000/home/say

ein

Dies sollte Sie auf den Controller nach Hause bringen, Aktion sagen

Bearbeiten: Wie der Rest der Leute gesagt hat und ich habe vergessen zu erwähnen, dass Sie eine Ansicht benötigen (eine Datei nach Konvention, die sich unter app/views/CONTROLLER_NAME/ACTION_NAME.html.erb befindet, in Ihrem Beispiel ist app / views / home / say.html.erb) wenn Wenn Sie keine solche Datei haben, wird Ihre Aktion nicht angezeigt und Sie erhalten eine Fehlermeldung.

    
Konstantinos 04.09.2009 08:49
quelle

Tags und Links