Rails7のAPIモードで発生したエラーをメモ。
必要に応じて随時追加していきます。
authenticate_user!がundefindになる現象
ルーティングで下記のように名前空間を設定しているため
Rails.application.routes.draw do
namespace :api do
namespace :v1 do
devise_scope :api_v1_user do
post 'auth/guest_sign_in', to: 'auth/sessions#guest_sign_in'
get '/auth/sessions', to: 'auth/sessions#index'
end
mount_devise_token_auth_for 'User', at: 'auth', skip: [:omniauth_callbacks], controllers: {
registrations: 'api/v1/auth/registrations',
sessions: 'api/v1/auth/sessions',
confirmations: 'api/v1/auth/confirmations',
passwords: 'api/v1/auth/passwords'
}
resources :boards, only: %i[index create update destroy]
コントローラーの方でも記述を合わせる必要がある。
before_action :authenticate_api_v1_user!
#名前空間に会わせる
def index
boards = current_api_v1_user.boards
#アクションも名前空間に合わせる
render json: boards, status: :ok
end
参考記事
存在しないコールバックを探すせいでエラーになる
アクションがない状態でコールバックを設定しているとエラーになる。
「先にindexアクションだけ作って後からupdateアクションを作ろう。でもコールバックだけ先に全部のアクションに設定しておくか」と考えて作業してたらエラーになった。
before_action :set_board, only: %i[update destroy]
#上記の場合、updateアクションがないとエラーになる
#この場合はupdateとdestroyアクションの両方があれば成功する
参考記事