前提・実現したいこと
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/15 05:11