知りたいこと
Remote :true
でxxx.js.erb
ファイルが無いときの挙動を知りたいのですが、自分の理解につながるページが見つけきれなかったので質問させていただきます。
##前提と質問
0. ScaffoldでTestを作り、Formはremote: trueを利用
0. Submitをクリック。
0. AjaxでSumitした値がデータベースに保存。
0. 下記の②に記載があるとおりshow.js.erbが呼び出される。
0. 4でshow.js.erbがない場合の挙動なのですが、①のリダイレクト先がturbolinksで呼び出されるという認識で良いのでしょうか?
def create @test = Test.new(test_params) respond_to do |format| if @test.save ①format.html { redirect_to @test, notice: 'Test was successfully created.' } ②format.json { render :show, status: :created, location: @test } #省略
##試したこと
Ajaxを利用して保存(Create)したあと、indexに戻りたいと思って、色々と試していたら、①をredirect_to tests_urlにしたら期待通りの動作をしたため、上記のように考えました。
どうぞよろしくお願いいたします。
##追記(2020/2/23)
Controllerの設定を
A.scaffoldで作成したままの状態
B.scaffoldで作成し、redirect先をtests_urlにした場合
【Aの設定】
formの設定 : remote: true
Controllerの設定 : redirect_to @test
(#showへのリダイレクト)
show.js.erbの有無 : 無し
【Aの結果】
TestController#Create
メソッドがjsで実行されている。(remote:true)
(通常であればshow.js.erb
が実行されるはずだが)・・・・※ここが勘違い※
TestController#showがHTML
で実行されている
【Aの実行結果】
Started POST "/tests" for 127.0.0.1 at 2020-02-23 09:02:07 +0900 Processing by TestsController#create as JS Parameters: {"authenticity_token"=>"sE3rv3ba5Fn8pSF/UBVBTNZn3SNQeh/Tf2a/jzh1FZCLTRbzwbrbhbp7IXuli5vKJBh9cg49oC3Q7T1DhkS90w==", "test"=>{"name"=>"iiiiiiiiiiii"}, "commit"=>"Create Test"} [1m[35m (0.1ms)[0m [1m[36mbegin transaction[0m ↳ app/controllers/tests_controller.rb:30:in `block in create' [1m[36mTest Create (0.4ms)[0m [1m[32mINSERT INTO "tests" ("name", "created_at", "updated_at") VALUES (?, ?, ?)[0m [["name", "iiiiiiiiiiii"], ["created_at", "2020-02-23 00:02:07.433656"], ["updated_at", "2020-02-23 00:02:07.433656"]] ↳ app/controllers/tests_controller.rb:30:in `block in create' [1m[35m (6.6ms)[0m [1m[36mcommit transaction[0m ↳ app/controllers/tests_controller.rb:30:in `block in create' Redirected to http://localhost:3000/tests/3 Completed 200 OK in 11ms (ActiveRecord: 7.1ms | Allocations: 2812) Started GET "/tests/3" for 127.0.0.1 at 2020-02-23 09:02:07 +0900 Processing by TestsController#show as HTML Parameters: {"id"=>"3"} [1m[36mTest Load (0.1ms)[0m [1m[34mSELECT "tests".* FROM "tests" WHERE "tests"."id" = ? LIMIT ?[0m [["id", 3], ["LIMIT", 1]] ↳ app/controllers/tests_controller.rb:67:in `set_test' Rendering tests/show.html.erb within layouts/application Rendered tests/show.html.erb within layouts/application (Duration: 0.2ms | Allocations: 80) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 11ms (Views: 8.8ms | ActiveRecord: 0.1ms | Allocations: 5400)
【Bの設定】
formの設定 : remote: true
Controllerの設定 : redirect_to tests_url
(#indexへのリダイレクト)
show.js.erbの有無 : 無し
【Bの結果】
TestController#Create
メソッドがjsで実行されている。(remote:true)
(通常であればshow.js.erb
が実行されるはずだが)・・・・※ここが勘違い※
TestController#indexがHTML
で実行されている
【Bの実行結果】
Started POST "/tests" for 127.0.0.1 at 2020-02-23 09:08:31 +0900 Processing by TestsController#create as JS Parameters: {"authenticity_token"=>"ftWx2hZ5cqRIljWtE1IrhkaR3rD0iiE8LRopR7IIQW9F1UyWoRlNeA5INanmzPEAtO5+4arNnsKCkauLDDnpLA==", "test"=>{"name"=>"eeeeeeeeeeee"}, "commit"=>"Create Test"} [1m[35m (0.1ms)[0m [1m[36mbegin transaction[0m ↳ app/controllers/tests_controller.rb:30:in `block in create' [1m[36mTest Create (0.6ms)[0m [1m[32mINSERT INTO "tests" ("name", "created_at", "updated_at") VALUES (?, ?, ?)[0m [["name", "eeeeeeeeeeee"], ["created_at", "2020-02-23 00:08:31.398580"], ["updated_at", "2020-02-23 00:08:31.398580"]] ↳ app/controllers/tests_controller.rb:30:in `block in create' [1m[35m (1.1ms)[0m [1m[36mcommit transaction[0m ↳ app/controllers/tests_controller.rb:30:in `block in create' Redirected to http://localhost:3000/tests Completed 200 OK in 10ms (ActiveRecord: 1.8ms | Allocations: 3017) Started GET "/tests" for 127.0.0.1 at 2020-02-23 09:08:31 +0900 Processing by TestsController#index as HTML Rendering tests/index.html.erb within layouts/application [1m[36mTest Load (0.2ms)[0m [1m[34mSELECT "tests".* FROM "tests"[0m ↳ app/views/tests/index.html.erb:14 Rendered tests/index.html.erb within layouts/application (Duration: 4.9ms | Allocations: 1101) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 37ms (Views: 34.9ms | ActiveRecord: 0.2ms | Allocations: 5930)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/23 01:19