rails6.1
初歩的な質問恐れ入ります。
ajaxでupdateを試みたのですがルーティングエラーが発生します。
ルーティングなど見直しましたが分かりません。
\config\routes.rb
ruby
1 resources :item_questions 2
app\controllers\item_questions_controller.rb
ruby
1class ItemQuestionsController < LoginController 2 #before_action :logged_in_user, only: [:new, :create, :update] 3 def update 4 @question = ItemQuestion.find(params[:id]) 5 @question.update(question_params) 6 end 7end
app\javascript\packs\item_questions\show.js
javascript
1$(document).on('click', '.js-edit', function() { 2 let parents = $(this).parents('.faq'); 3 let value = $(parents).find('.input-text').val(); 4 let questionId = $(parents).find('.js-faq-id').text(); 5 6 7 $.ajax({ 8 url: '/item_questions/' + questionId, 9 type: 'PATCH', 10 cache: false, 11 data: {answer_text: value} 12 }); 13 14 15 }); 16
エラーメッセージ
error
1ActionController::RoutingError (No route matches [PATCH] "/update"):
分かる方教えていただけないでしょうか?
宜しくお願いします。
追記
controllerの一行目、
before_action :logged_in_user
をコメントアウトすると、通りました。
このlogged_in_user()の目的は、ログインしてないと登録、更新はさせないという意図です。
コードは、このようになってます。
app\controllers\concerns\login_controller.rb
ruby
1class LoginController < ApplicationController 2 3 private 4 # beforeアクション ログイン済みユーザーかどうか確認 5 def logged_in_user 6 unless logged_in? 7 store_location 8 flash[:danger] = "ログインしてください" 9 redirect_to login_url 10 end 11 end 12 13 14 15end
追記
logged_inは、SessionHelperから呼び出してます。
Railsチュートリアルを流用しました。
ruby
1module SessionsHelper 2 3 # 渡されたユーザーでログインする 4 def log_in(user) 5 session[:user_id] = user.id 6 end 7 8 # ユーザーのセッションを永続的にする 9 def remember(user) 10 user.remember 11 cookies.permanent.signed[:user_id] = user.id 12 cookies.permanent[:remember_token] = user.remember_token 13 end 14 15 # 現在ログイン中のユーザーを返す (いる場合) 16 def current_user 17 if (user_id = session[:user_id]) 18 @current_user ||= User.find_by(id: user_id) 19 elsif (user_id = cookies.signed[:user_id]) 20 user = User.find_by(id: user_id) 21 if user && user.authenticated?(:remember, cookies[:remember_token]) 22 log_in(user) 23 @current_user = user 24 end 25 end 26 end 27 28 # ユーザーがログインしていればtrue、その他ならfalseを返す 29 def logged_in? 30 !current_user.nil? 31 end 32 33 # 永続的セッションを破棄する 34 def forget(user) 35 user.forget 36 cookies.delete(:user_id) 37 cookies.delete(:remember_token) 38 end 39 40 # 現在のユーザーをログアウトする 41 def log_out 42 forget(current_user) 43 session.delete(:user_id) 44 @current_user = nil 45 end 46 47 # 記憶したURL (もしくはデフォルト値) にリダイレクト 48 def redirect_back_or(default) 49 redirect_to(session[:forwarding_url] || default) 50 session.delete(:forwarding_url) 51 end 52 53 # アクセスしようとしたURLを覚えておく 54 def store_location 55 session[:forwarding_url] = request.original_url if request.get? 56 end 57 58 end 59
回答1件
あなたの回答
tips
プレビュー