rails6とvue2系でアプリケーションを作っています。
現状
axiosを使って作成、編集をする際にバリデーションに弾かれた場合にコンソールに以下のエラー分が表示されます。
バリデーションエラー文自体は表示できるのですが、コンソールに422が表示される理由がわかりません。
バリデーションに引っかからない場合は200で通ります。
corsはrack-corsを使用しています
console
1POST http://localhost:5000/api/users 422 (Unprocessable Entity)
terminal
1Completed 422 Unprocessable Entity in 284ms (Views: 0.5ms | ActiveRecord: 4.9ms | Allocations: 6669)
controller
1class Api::UsersController < ApplicationController 2 3 def create 4 user = User.new(user_params) 5 if user.save 6 render status: 200, json: user 7 else 8 render status: :unprocessable_entity, json: { messages: user.errors.full_messages} 9 end 10 end 11 private 12 13 def user_params 14 params.require(:user).permit(:name, :email, :password, :password_confirmation) 15 end 16end
routes
1Rails.application.routes.draw do 2 namespace :api, {format: 'json'} do 3 resources :users, only: [:create, :update] 4 end 5end
application
1Rails.application.config.middleware.insert_before 0, Rack::Cors do 2 allow do 3 origins '*' 4 resource '*', headers: :any, methods: [:get, :post, :patch, :put, :delete] 5 end 6 end
vue
1import axios from 'axios'; 2const apiUrl = "http://localhost:5000"; 3export default defineComponent({ 4 data: () => ({ 5 errors: [] 6 }), 7 methods: { 8 create() { 9 axios.post(apiUrl + '/api/users', { 10 user: { 11 name: this.name, 12 email: this.email, 13 password: this.password, 14 password_confirmation: this.password_confirmation 15 } 16 }) 17 .then(res => { 18 alert("Successfully user created!"); 19 }) 20 .catch(err => { 21 this.errors = err.response.data.messages 22 }) 23 } 24 }, 25}) 26</script>
調べたこと
・protect_from_forgery の設定
https://stackoverflow.com/questions/54737888/error-422-unprocessable-entity-rails-api-vuejs-from
https://qiita.com/terufumi1122/items/997e24dde87f807e3944
corsの設定に問題があるのでしょうか?
原因が特定できずにいます。
もしくはコントローラーでstatus: :unprocessable_entityと設定しているので、表示されるのは問題ないのでしょうか?(そんなはずないと思っています。。)
知見のある方いましたら教えていただきたいです。
rails 6.1.3.2
vue 2系
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/30 08:40
2021/06/30 08:41
2021/06/30 08:42