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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

1回答

793閲覧

Routing Errorが出て困っています

ggmain874

総合スコア0

Ruby on Rails 5

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/08/03 17:35

編集2020/08/04 00:38

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
railsとajaxを用いてenumでセレクトボックスを作成、
セレクトボックスで選択した項目の自動更新(データベースへの自動反映)を
ajaxで実施しようとしています
その際、PATCHとPUTでRoutingしているのですが、
以下のエラーメッセージが出て困っています。
もし何かアドバイスがありましたらご教授いただけますと幸いです。

発生している問題・エラーメッセージ

Routing Error

No route matches [GET] "/statuses/3/status_creator"

該当のソースコード

ruby

1<table class="table table-bordered"> 2 <thead> 3 <tr> 4 <th class="text-center">id</th> 5 <th class="text-center">Creator</th> 6 <th class="text-center">Status</th> 7 </tr> 8 </thead> 9 10 <tbody> 11 12 <% analysis_datasets.each do |analysis_dataset| %> 13 14 <tr> 15 <td class="text-center"><%= link_to analysis_dataset.id, edit_analysis_dataset_path(analysis_dataset) %></td> 16 <td class="text-center"><%= analysis_dataset.creator %></td> 17 <td class="text-center"><%= select :status_creator, :name, options_for_select(Status.status_creators.keys.map{|k| [k, k]}, selected: analysis_dataset.status_creator), {}, { class: 'js-stasus_creator form-control', data: { id: analysis_dataset.id }, method: :patch, remote: true} %></td> 18 19 </tr> 20 21 <% end %> 22 </tbody> 23</table>

ruby

1Rails.application.routes.draw do 2 resources :statuses do 3 resource :status_creator, only: :update, controller: 'statuses/status_creator' 4 end 5end

ruby

1class Statuses::StatusCreatorController < StatusesController 2 3 #Ajax 4 def update 5 @status = Status.find(params[:status][:id]) 6 7 case params[:status][:status_creator] 8 when 'not_yet' 9 @status.not_yet! 10 when 'working' 11 @status.working! 12 when 'done' 13 @status.done! 14 end 15 16 respond_to do |format| 17 format.json { render json: {creator: @status.creator, status_creator: @status.status_creator} } 18 end 19 end 20 21 22end

ruby

1class Status < ApplicationRecord 2 enum status_creator: {not_yet: 0, working: 1, done: 2}, _prefix: true 3end

javascript

1$(document).ready(function() { 2 /* global $*/ 3 $('.js-stasus_creator').change(function() { 4 var status_id = $(this).data('id'); 5 var status_creator = $(this).val(); 6 7 $.ajax({ 8 type: 'PATCH', 9 url: '/statuses/' + status_id + '/status_creator', 10 data: { 11 status: { 12 id: status_id, 13 status_creator: status_creator 14 } 15 16 }, 17 dataType: 'json', 18 }) 19 .done(function(data) { 20 alert(data.creator + 'さんのステータスを' + data.status_creator + 'に更新しました。'); 21 }) 22 }) 23});

試したこと

ググっていろいろ調べてみましたがいまいち原因がよくわかりませんでした。
そもそもなぜ[GET]になってしまうのかわかっていません。
Rails, jqueryは初心者です。
また、今回初めて質問させていただきます。
もし情報に不足等ありましたら、ご指摘いただけますと幸いに存じます
よろしくお願いいたします。

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

AWSで開発は実施しております

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/08/04 00:08

よくしらんので直感で /statuses/3 /statuses/status_creator/3 とかじゃないの
ggmain874

2020/08/04 00:39

ご回答いただき、ありがとうございます! 試してみましたがうまくいきませんでした 質問修正してみましたが、記載の不足している部分がありましたら コメントいただけますと幸いです。 よろしくお願いいたします。
ggmain874

2020/08/04 04:45

ご指摘いただき、ありがとうございます。 そうすると、updateを実施したい場合、どのメソッドを設定することになるでしょうか? Putは試してみましたがうまくいきませんでした。 もしご存じでしたらご教授いただけますと幸いです よろしくお願いいたします。
guest

回答1

0

resource :status_creator, only: :update
としているのですから、/statuses/3/status_creator は無いです。
これですと、statuses コントローラーの status_creator アクションになる。
patchにて /statuses/status_creator/3
では無いかな。

投稿2020/08/04 11:22

winterboum

総合スコア23567

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

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

ggmain874

2020/08/04 15:12

ご回答いただき、ありがとうございます 修正してみましたが、以下のように同様のエラーが出てしまいます Routing Error No route matches [GET] "/statuses/status_creator/3"
ggmain874

2020/08/04 15:48 編集

ちなみにですが、rake routesの結果以下のようになっております status_api_status_creator PATCH /statuses/:status_id/api/status_creator(.:format) api/status_creators#update PUT /statuses/:status_id/api/status_creator(.:format) api/status_creators#update
winterboum

2020/08/04 22:47

indentがなくなってて読みにくい、、、 多分こうかな /statuses/3/api/status_creator
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問