Rails: Warum funktioniert die benutzerdefinierte url ändern, wenn "render " neue" heißt?
Ich habe einen controller, der steuert, ein Kontakt-Formular auf der Kontakt-Seite. Innerhalb der routes.rb
- Datei habe ich eine Zeile, die sagt match '/contact', :to => 'feedback#new'
. Nun, wenn das Formular richtig ausgefüllt ist, funktioniert alles einwandfrei; die url ist "/Kontakt". Jedoch, wenn das Formular nicht korrekt ausgefüllt, mein controller renders 'new'
und die url ändert sich von '/contact'
zu '/feedback'
. Kann mir jemand sagen warum das passiert und wie ich es beheben kann, so dass, wenn die Validierungen ausgelöst werden und die Seite gerendert wird, wird die url /contact
noch und nicht /feedback
? Danke!
Meine controller-code:
- Können Sie die Inhalte Ihrer
config/routes.rb
- Datei? Bearbeiten Sie Die anzeigen-code würde natürlich auch helfen. Wenn Sieform_for(@feedback)
, wenn die form Beiträge, es tut einen BEITRAG zu/feedback
da Schienen verwendet RESTful URLs. Denken Sie daran, dass die URLs basieren auf den Routen von Controller und Aktionen, NICHT den Namen der Ansicht, du bist rendering.FeedbackController#create
ist wahrscheinlich zugeordnet/feedback
(checkrake routes
) - Du hast Recht
FeedbackController#create
zugeordnet ist/feedback
route. Was soll ich also tun, um Antwort auf meine obige Frage? - Haben Sie jemals herausfinden? Ich bin mit diesen zu kämpfen.
- Ja und Nein. Ich fand, dass, wenn Sie den Titel in die create-action des Controllers, beim Rendern aufgerufen wird, die url wird noch festgelegt werden, was Sie wollen; ich bin jedoch nicht sicher, ob dies ist, wie es ist, angenommen zu werden, oder wenn es nur ein quick-fix. Ich weiß immer noch nicht, warum dies geschieht.
- Ich bin Einstellung @Titel in meinem schaffen, aber es ist noch nicht zu helfen. Können Sie code bereitstellen? Vielen Dank für immer zu mir zurück.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese route wird nur entsprechen
/contact
zuFeedbackController#new
.Die Sie hinzufügen möchten, zu entsprechen, der "post" - Teil zu
FeedbackController#create
Ihre form wird nun
Nur mit dem Standard -
form_for
werden versuchen, erstellen Sie den Pfad von einemresources
in Ihremroutes.rb
. Und ich gehe davon aus, dass route istresources :feedback
welche natürlich Routen erstellen, die Aussehen wie/feedback
.:via => :get
zu den #neuen Pfad in Rails 3.Ihre Routen.rb statt Ihre
/contact
matcher verwenden:http://guides.rubyonrails.org/routing.html#customizing-resourceful-routes