前提・実現したいこと
Ruby on rails で体重管理アプリを作っています。
form_withメソッドを使って入力した内容を保存または更新をするためにform_with model:@変数名 で記述しsubmitボタンを押したところ下記のエラーが発生しました。
ビューにデータを表示させる前にまずはフォームの内容をfeaturesテーブルに保存したいと考えております。
半日かけて調べたりコードをいじりましたが解決できませんでした。
学習を始めてまだ1ヶ月のひよっこですが、ご指導ご鞭撻の程よろしくお願いいたします。
発生している問題・エラーメッセージ
Routing Error No route matches [POST] "/mypages/1/edit"
該当のソースコード
ruby
1#config/routes.rb 2 3Rails.application.routes.draw do 4 devise_for :users 5 root "toppages#index" 6 resources :users, only: [:edit, :update, :index] 7 resources :messages, only: [:index, :create, :new] 8 resources :mypages, only: [:index, :new, :create, :edit, :update] 9end
ruby
1#mypages_controller.rb 2 3class MypagesController < ApplicationController 4 def index 5 @chart = [['7月9日', 70], ['7月10日', 75], ['7月11日', 80],['7月12日', 65]] 6 @features = Feature.all 7 end 8 9 def new 10 @feature = Feature.new 11 end 12 13 def create 14 Feature.create(feature_params) 15 end 16 17 def edit 18 @feature = Feature.find_by_id(params[:id]) 19 unless @feature then 20 render :edit 21 end 22 end 23 24 def update 25 @feature = Feature.find(params[:id]).update(feature_params) 26 end 27 28 private 29 30 def feature_params 31 params.require(:feature).permit(:length, :weight, :age, :goalweight, :goaldate).merge(user_id: current_user.id) 32 end 33 34 35end
ruby
1#app/views/mypages/edit.html.haml 2#app/views/mypages/new.html.haml 3 4.Main__Contents 5 = form_with model: @feature, local: true do |f| 6 = f.number_field :length, placeholder: '身長' 7 = f.number_field :weight, placeholder: '体重' 8 = f.number_field :age, placeholder: '年齢' 9 = f.number_field :goalweight, placeholder: '目標体重' 10 = f.datetime_field :goaldate, placeholder: '目標日' 11 = f.submit '送信'
ruby
1#app/views/mypages/index.html.haml 2 3.UpperContents 4 .UpperContents__userName 5 = current_user.name 6 .UpperContents__topmessage 7 体重の変化 8 .UpperContents__edit 9 = link_to edit_user_path(current_user) do 10 = icon('fas', 'cog') 11 .UpperContents__information 12 = link_to edit_mypage_path(current_user) do #今回のリンク先 13 情報 14= line_chart @chart, width: "900px", height: "500px" 15.BottomContents 16 = render partial: "feature", collection: @features 17.BottomMain 18 %form.BottomMain__Weight 19 %input.weightBtn{url: '#', type: 'number', placeholder: '今日の体重を入力'} 20 %input.submitBtn{url: '#', type: 'submit', value: '登録する'}
#rails routes root_path GET / toppages#index users_path GET /users(.:format) users#index edit_user_path GET /users/:id/edit(.:format) users#edit user_path PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update messages_path GET /messages(.:format) messages#index POST /messages(.:format) messages#create new_message_path GET /messages/new(.:format) messages#new mypages_path GET /mypages(.:format) mypages#index POST /mypages(.:format) mypages#create new_mypage_path GET /mypages/new(.:format) mypages#new edit_mypage_path GET /mypages/:id/edit(.:format) mypages#edit mypage_path PATCH /mypages/:id(.:format) mypages#update PUT /mypages/:id(.:format) mypages#update
試したこと
rails routesコマンドで該当のコントローラーとアクションを確認しましたがPOSTメソッドに対応する記述がないことを確認。form_withメソッドはデフォルトがPOSTなので対応したHTTPメソッドを指定する必要があるのかと思い、method: getと記述しましたがnameエラーが出てしまいました。
ルーティングに問題があると思い、ネストしたり色々試みましたが結果は変わらず。
補足情報(FW/ツールのバージョンなど)
ruby '2.6.5'
rails '6.0.0'
mysql2 '0.4.4'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/17 02:52
2020/07/17 03:48
2020/07/17 08:58
2020/07/17 10:56
2020/07/19 04:39