前提・実現したいこと
ここに質問の内容を詳しく書いてください。
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で開発は実施しております