質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1354閲覧

createでデータを送信した後、UserのShow画面を表示したい

myxo

総合スコア2

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/15 02:13

編集2020/05/15 02:14

前提・実現したいこと

railsで簡単なメモアプリを作っています。
実現したいことは、自分だけ(currenr_user)のメモのみを作成し、見れるようにしたいので、
①Usersコントローラーから、②new、createを行い、③create後は、Usersコントローラーの個人のshowアクションを表示することです。
前提
・コントローラーは2つあり、Usersコントローラーと、Memosコントローラーがあります。
・先にmemosコントローラーで挙動等を確認した後、index以外の機能をusersコントローラーに移動しようと考えていましたので、memosとusersで同じような内容の記述がなされています。
・今回は、newとcreateをusersコントローラーに移動させてているときに発生しました。

発生している問題

現段階では、②の後に、Memosコントローラーのindexに飛んでしまい、Usersコントローラーのshow画面に遷移しません。

エラーメッセージ

該当のソースコード

ruby

1class UsersController < ApplicationController 2 3 def new 4 @memo = Memo.new 5 end 6 7 def create 8 Memo.create(memo_params) 9 redirect_to controller: :users, action: :show 10 end 11 12 def show 13 @user = User.find(params[:id]) 14 @memos = @user.memos 15 end 16 17 private 18 def memo_params 19 params.require(:memo).permit(:food, :limit_date).merge(user_id: current_user.id) 20 end 21end 22

ruby

1class MemosController < ApplicationController 2 def index 3 @memos = Memo.includes(:user) 4 end 5 6 def new 7 @memo = Memo.new 8 end 9 10 def create 11 Memo.create(memo_params) 12 redirect_to root_path 13 end 14 15 def show 16 @memos = Memo.includes(:user) 17 @memo = Memo.find(params[:id]) 18 end 19 20 def edit 21 @memo = Memo.find(params[:id]) 22 end 23 24 def update 25 memo = Memo.find(params[:id]) 26 memo.update(memo_params) 27 redirect_to memo_path(memo) 28 end 29 30 def destroy 31 memo = Memo.find(params[:id]) 32 memo.destroy 33 redirect_to root_path 34 end 35 36 private 37 def memo_params 38 params.require(:memo).permit(:food, :limit_date).merge(user_id: current_user.id) 39 end 40end 41

ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root to: 'memos#index' 4 resources :users, only: [:new, :create, :show] 5 resources :memos, only: [:index, :create, :show, :edit, :update, :destroy] 6 7 # , only: [:index, :new, :create, :show, :edit, :update, :destroy] 8 9end

試したこと

ターミナルを確認したところ、Memoのindex→(すでにログインしているので)Usersのnew→Memoのcreate→Memoのindexとなっています。
Usersコントローラーでcreateを設定しているのに、なぜMemoコントローラーになるのかが分かりませんでした。(newはUsersになっているので余計に)
Memosコントローラーのcreateアクションに、

def create Memo.create(memo_params) redirect_to controller: :users, action: :show end

と記述しても、

No route matches {:action=>"show", :controller=>"users"}

と出てくるため、いったんredirect_to root pathに戻した内容で今回は全てを記載しております。

Processing by MemosController#index as HTML Rendering memos/index.html.haml within layouts/application User Load (4.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 Memo Load (1.1ms) SELECT `memos`.* FROM `memos` User Load (1.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1, 2) Rendered memos/_left-contents.html.haml (96.7ms) Rendered memos/_right-contents.html.haml (2.9ms) Rendered memos/index.html.haml within layouts/application (130.3ms) Completed 200 OK in 223ms (Views: 211.4ms | ActiveRecord: 6.8ms) Started GET "/users/new" for ::1 at 2020-05-15 11:02:44 +0900 Processing by UsersController#new as HTML Rendering users/new.html.haml within layouts/application User Load (19.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 Rendered users/new.html.haml within layouts/application (44.4ms) Completed 200 OK in 156ms (Views: 125.4ms | ActiveRecord: 19.3ms) Started POST "/memos" for ::1 at 2020-05-15 11:02:51 +0900 Processing by MemosController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"EnJZJG6azc5YoMnFQ6APNgjdCMpi9OMq3yXaaCk2ygaeSGMht0Tzcdd3ey96e6BvSf5Nr25FYBGxLgPNKP+FwQ==", "memo"=>{"food"=>"test3", "limit_date(1i)"=>"2020", "limit_date(2i)"=>"5", "limit_date(3i)"=>"15"}, "commit"=>"AddFood"} User Load (7.9ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 (0.2ms) BEGIN User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 SQL (0.4ms) INSERT INTO `memos` (`food`, `limit_date`, `user_id`, `created_at`, `updated_at`) VALUES ('test3', '2020-05-15', 1, '2020-05-15 02:02:51', '2020-05-15 02:02:51') (5.5ms) COMMIT Redirected to http://localhost:3000/ Completed 302 Found in 28ms (ActiveRecord: 14.6ms) Started GET "/" for ::1 at 2020-05-15 11:02:51 +0900 Processing by MemosController#index as HTML Rendering memos/index.html.haml within layouts/application User Load (4.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 Memo Load (0.5ms) SELECT `memos`.* FROM `memos` User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` IN (1, 2) Rendered memos/_left-contents.html.haml (52.5ms) Rendered memos/_right-contents.html.haml (19.1ms) Rendered memos/index.html.haml within layouts/application (101.8ms) Completed 200 OK in 251ms (Views: 240.4ms | ActiveRecord: 5.6ms)

簡単なミスかもしれませんが、どなたかご教示いただけますと助かります。
どうぞよろしくお願い致します。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

controllerを再構成することを薦めます。
UsersControllerはUserをcontrollするものですから、ここでのcrate,showはUserを扱うようにしてください。
showの情報として、userのmemoを表示したり、新規memoをつくるエリアやボタンを用意したりはあり、ですが あくまで user がベース

そこからmemoを作成するのは MemosContorollerのしごと。
Memoのcreateから Userのshowへ飛ばすのはありですが、MemoのハンドリングはMemosControlerで、Userではないです。

routsには resources :users, only: [:new, :create, :show] がありますからredirectできないのは??ですね。ああ、IDがないからだ。
redirect_to user_path(current_user) としてみてください。

投稿2020/05/15 04:49

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

myxo

2020/05/15 05:11

いつも、ご指摘ありがとうございます。 無事、書いてある通りに変更することで、表示を変えることができました。 また、回答の提示のみではなく、理由も説明してくださったので、自身のコントローラーに対しての理解も深まりました。本当にありがとうございます。 ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問