Ich arbeite an einer Spielzeug-Web-App, um Ruby on Rails zu üben, und ich bin auf ein Problem gestoßen, das ich in der Dokumentation nicht herausfinden konnte. Im Wesentlichen habe ich ein Formular, um Aufgaben zu erstellen und sie mit Benutzern in Beziehung zu setzen, aber das Formular gibt einen Fehler 302 aus, wenn es gesendet wird, und der Datensatz wird nicht gespeichert.Rails Create 302 Fehler
Ich habe zwei Modelle, Benutzer und Aufgaben Benutzer
class User < ApplicationRecord
has_many :tasks
end
Aufgabe
class Task < ApplicationRecord
belongs_to :article
end
Die Idee ist einfach, kann ein Benutzer viele Aufgaben haben. Die Migrationen für diese funktionieren gut.
I eine (teilweise) Form für die Erstellung von Aufgaben erstellt haben:
_compact_form.html.erb
<%= form_for([@currentUser, @currentUser.tasks.build]) do |f| %>
<p>
<%= f.label :label %>
<%= f.text_field :label %>
<%= f.label :complete %>
<%= f.check_box :complete%>
<%= f.submit %>
</p>
<% end %>
und dieser ist an einem Armaturenbrett Ansicht, die ein Armaturenbrett-Steuerung bis trivially verdrahtet :
class DashboardController < ApplicationController
def index
@currentUser = User.find(1)
end
end
Alles ziemlich gerade so weit. Mein Aufgaben-Controller verfügt über einige Methoden, um die Erstellung bisher zu verwalten.
Aufgaben Controller:
class TasksController < ApplicationController
def new
end
def show
@user = User.find(params[:user_id])
end
def create
@user = User.find(params[:user_id])
@task = @user.tasks.create(task_params)
redirect_to '/'
end
private
def task_params
params.require(:task).permit(:label, :complete)
end
end
Und jetzt sind wir an dem Punkt sind, wo ich verwirrt. Ich habe eine Aufgabe manuell in meine Datenbank eingefügt und kann sie problemlos abrufen, aber aus irgendeinem Grund gibt meine Erstellungsroute einen HTTP 302-Fehler. Ich habe meine Routen wie so ein:
resources :users do
resource :tasks
end
root 'dashboard#index'
get 'dashboard/index'
und Rechen Routen gibt
Prefix Verb URI Pattern Controller#Action
new_user_tasks GET /users/:user_id/tasks/new(.:format) tasks#new
edit_user_tasks GET /users/:user_id/tasks/edit(.:format) tasks#edit
user_tasks GET /users/:user_id/tasks(.:format) tasks#show
PATCH /users/:user_id/tasks(.:format) tasks#update
PUT /users/:user_id/tasks(.:format) tasks#update
DELETE /users/:user_id/tasks(.:format) tasks#destroy
POST /users/:user_id/tasks(.:format) tasks#create
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
root GET / dashboard#index
dashboard_index GET /dashboard/index(.:format) dashboard#index
so die Route erstellen erscheint, dort zu sein, und es scheint korrekt zu sein.
Jetzt für den seltsamsten Teil! Wenn ich meine Form zu verwenden, ist es das, was ich in der Konsole sehen:
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
(0.1ms) begin transaction
(0.1ms) commit transaction
Dies scheint der richtige Code in meinen Aufgaben # create-Methode zu sein, also ist ich ziemlich verwirrt, wo die Daten gehen. Kann jemand etwas Licht in die nächsten Schritte werfen, um das zu debuggen? Ich habe einige Zeit damit verbracht, verschiedene Formen zu erstellen und die Beispiele in this Leitfaden zu bearbeiten, aber ich habe anscheinend irgendwo einen Fehler gemacht und ich kann es nicht finden.
HTTP 302 bedeutet, dass es zeitlich umgeleitet wird, was das richtige Verhalten ist, da Sie in Ihrer create-Methode 'redirect_to '/'' aufrufen. – danirod
Und sollte das den neu erstellten Datensatz entfernen? Ich hätte hinzufügen sollen, dass die Datenbank nicht aktualisiert wird. – Grisk
Können Sie die Parameter bitte posten –