2013-11-22 10 views
6

Ich habe die Routen für eine bestimmte Aktion definiert und eine Verknüpfung erstellt. Ich habe auch die entsprechenden Ansichten erstellt, aber nicht die Controller-Aktionsmethode definiert. Immer noch wird die Ansicht beim Klicken auf den Link gerendert. Das heißt, die Ansicht wird wiedergegeben, ohne dass die Aktion tatsächlich vorhanden ist.Schienen 3 Rendering Ansicht ohne Aktion

Irgendwelche Erklärungen?

Antwort

5

Ja, die Ansicht wird gerendert, auch wenn keine entsprechende Aktion vorhanden ist, sie funktioniert, da Routen für dieselben definiert sind. Aber das ist keine gute Übung!

+1

Wann wird dann ein undefinierter Aktionsfehler ausgelöst? Nur wenn die entsprechende Ansicht nicht vorhanden ist ?? – AshwinKumarS

+3

@RSB, kann dies nützlich sein beim Versuch, eine statische Seite zu rendern – Virtual

+2

undefined Aktion Fehler kommt, wenn die Seite nicht statisch ist, stimme ich @Virtual – RSB

1

Rails erwartet nicht, dass Sie eine Controller-Aktion für jede Route in Ihrer config/routes.rb-Datei definieren. Wie Sie wahrscheinlich wissen, können Sie eine Aktion definieren und lassen auch sie wie so leer:

class PostsController < ApplicationController 

    def index 
    end 

end 

Für jede Web-Anwendung wird es ungewöhnlich, dass es auf diese Weise als Code zum Beispiel Variablen bleiben, Datenbanktransaktionen und dergleichen Willen schließlich füllen die meisten Ihrer Controller-Aktionen. Für eine reine statische Seite sollte die Aktion noch definiert sein, sollte aber leer sein.

3

Damit Rails eine Ansicht rendern kann, müssen Sie einen Controller (nicht unbedingt mit einer entsprechenden Methode) definiert haben, eine Route, die auf die Ansicht und die Ansicht verweist. Das Hinzufügen einer Methode zum Controller ist nur erforderlich, wenn Sie der Ansicht Daten bereitstellen müssen.

Es gibt eine ziemlich ausführliche Erklärung in http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-by-default-convention-over-configuration-in-action

0

Auch dies ist, wenn Sie definieren Filter für diese Aktion, auch unabhängig von ausgeführt wird, ob Sie die Aktion definiert haben oder nicht und wie Glen erwähnt die Schienen durch seine Verbindung automatisch rendert die Ansicht des gleichen Namens wie die der Aktion innerhalb des Ordners mit dem Namen des Controllers (der sich im View-Ordner befindet).

Leere Aktion entspricht keiner Aktion, aber vorgeschrieben ist, aus bestimmten Gründen Aktion (wie verständlicherweise und Wartbarkeit) zu definieren.

Referenz: hier in diesem link sagt

Beachten Sie, dass die leere Methode aus dem obigen Beispiel würde gut funktionieren, weil Rails die new.html.erb Ansicht standardmäßig machen, es sei denn die Aktion sagt etwas anderes

Daher ist eine explizite HTTP-Antwort definiert, falls Sie die Standardantwort ändern müssen.