私はRuby on Railsを実践するためにおもちゃのウェブアプリを開発していますが、私はその文書では理解できなかった問題にぶつかってきました。基本的には、タスクを作成してユーザーに関連付けるフォームがありますが、フォームは送信時にレコードが保存されていない場合に302エラーが発行されます。Rails Create 302 Error
は、私は2つのモデル、ユーザを持ち、タスク ユーザー
class User < ApplicationRecord
has_many :tasks
end
タスク
class Task < ApplicationRecord
belongs_to :article
end
アイデアはシンプルで、ユーザーは多くのタスクを持つことができます。これらの移行は正常に動作しています。
Iタスクを作成するための(部分)フォーム作成した:
<%= 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 %>
_compact_form.html.erb
が、これは自明ダッシュボードコントローラまで配線されるダッシュボードビューに取り付けられています。 :
class DashboardController < ApplicationController
def index
@currentUser = User.find(1)
end
end
これまでのところかなり単純です。私のタスクコントローラには、これまでの作成を管理するためのいくつかのメソッドがあります。
タスクコントローラ:
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
そして今、我々は、私は混乱のポイントにいます。私は手動でデータベースにタスクを挿入しましたが、それを正常に取得できますが、何らかの理由で作成ルートがHTTP 302エラーを出しています。その作成した経路は、そこに表示され、それが正しいように見える
resources :users do
resource :tasks
end
root 'dashboard#index'
get 'dashboard/index'
とレーキルート出力
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
:私はそうのような私のルートを設定しています。
今、最も奇妙な部分です!私は自分のフォームを使用している場合、これは私がコンソールに表示するものである。
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
(0.1ms) begin transaction
(0.1ms) commit transaction
これは#メソッドを作成し、私の仕事で正しいコードであるように思われるので、データが起こっているところ私はかなり混乱しています。誰かがこれをデバッグするための次のステップにいくつかの光を当てることができますか?私は別のフォームを作成し、thisガイドの例を使って作業する時間を費やしましたが、私はラインのどこかでミスをしたように見えます。それはリダイレクトに与える応答の種類を知らないので、それはあなたのクライアントが行くlocation
ヘッダフィールドを処理し想定しているので
HTTP 302は、一時的に正しい行動はあなたが 'redirect_to「/」を'呼び出しているあなたの 'create'方式であるためである、リダイレクトされることを意味します。 – danirod
新しく作成されたレコードを削除する必要がありますか?データベースが更新されていないと付け加えておきます。 – Grisk
あなたはのparamsはあなたが私は問題はHTTPエラーについてであることができなかったことを実感しましたので、私はこの答えを受け入れるつもりです –