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

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

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

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

Q&A

解決済

2回答

595閲覧

RoutingErrorの原因がわかりません・・・

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2017/09/22 07:47

いつもお世話になっております。

Rails5で勤怠管理アプリを制作中なのですが、
Routing Errorが出てしまいます。

##実現したいこと
top_pageでボタンを押すと、押した時間が保存され、top_pageにリダイレクトする。

##ソース

html

1<!-- top_page --> 2<div class="col-md-12 col-sm-12 col-xs-12 alert_message"> 3 <% flash.each do |key, value| %> 4 <%= content_tag(:div, value, class: "#{key}") %> 5 <% end %> 6</div> 7<div class="col-md-12 col-sm-12 col-xs-12 text-center"> 8 <%= form_tag work_in_create_path, method: :post do %> 9 <button type='submit' class="btn btn-lg btn-default menu_button">ボタン</button> 10 <% end %> 11</div>

ruby

1#routes.rb 2Rails.application.routes.draw do 3 4 get '', to:'top_page#index', via:'get', as:'top_page' 5 6 scope :work_in do 7 get '', to:'work_in#index', via:'get', as:'work_in' 8 get 'new', to:'work_in#new', via:'get', as:'work_in_new' 9 get 'create', to:'work_in#create', via:'post', as:'work_in_create' 10 get 'edit', to:'work_in#edit', via:'get', as:'work_in_edit' 11 get 'update', to:'work_in#update', via:'get', as:'work_in_update' 12 get 'delete', to:'work_in#delete', via:'get', as:'work_in_delete' 13 end 14end

ruby

1#work_in_controller.rb 2class WorkInController < ApplicationController 3 def index 4 end 5 6 def new 7 end 8 9 def create 10 @work_in_time = WorkingTime.new 11 @work_in_time.work_in_time = DateTime.new 12 13 if @work_in_time.save 14 redirect_to top_page_path 15 flash[:notice] = "時間を記録しました!" 16 else 17 redirect_to top_page_path 18 flash[:alert] = "時間を記録できませんでした。もう一度お試しください。" 19 end 20 end 21 22 def edit 23 end 24 25 def update 26 end 27 28 def delete 29 end 30end

エラー文

Started POST "/work_in/create" for ::1 at 2017-09-22 16:30:01 +0900 ActionController::RoutingError (No route matches [POST] "/work_in/create"):

なお、rails routesを叩くと、以下が返ってきます。

Prefix Verb URI Pattern Controller#Action top_page GET / top_page#index work_in GET /work_in(.:format) work_in#index work_in_new GET /work_in/new(.:format) work_in#new work_in_create GET /work_in/create(.:format) work_in#create work_in_edit GET /work_in/edit(.:format) work_in#edit work_in_update GET /work_in/update(.:format) work_in#update work_in_delete GET /work_in/delete(.:format) work_in#delete

初歩的な質問で申し訳ないですが、ご教授いただければと思います。
どうぞよろしくお願い致します。

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

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

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

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

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

guest

回答2

0

get 'create', to:'work_in#create', via:'post', as:'work_in_create'

この指定だとcreateはgetメソッドになってしまいます。

post 'create', to:'work_in#create', as:'work_in_create'

に変更すれば動くと思います。
ちなみにroutesを設定する際にgetを使用する時にはviaは必要ないです。

投稿2017/09/22 07:55

y_y3

総合スコア179

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

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

0

ベストアンサー

get ***のように設定している以上、via:の設定は効かず、すべてGETでルートが振られてしまっています。post ***としましょう。

なお、手動でルーティングを振ると煩雑になります。特段の理由がないなら、resourcesなどを利用して、標準的な振り方をしたほうが便利だと思います。

投稿2017/09/22 07:53

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2017/09/22 08:02

ありがとうございます!納得できました。 リソースベースで定義する場合、名前付きのルーティングはどう定義すればよろしいでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問