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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Ruby on Rails

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

CORS

CORSとはCross-Origin Resource Sharingの頭文字をとったもので、ブラウザがオリジン以外のサーバからデータを取得するシステムのことです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2613閲覧

railsとvueでバリデーションで弾かれた際に422 (Unprocessable Entity)が出てしまう。

tenlife

総合スコア70

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Ruby on Rails

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

CORS

CORSとはCross-Origin Resource Sharingの頭文字をとったもので、ブラウザがオリジン以外のサーバからデータを取得するシステムのことです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/06/30 07:48

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系

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

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

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

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

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

guest

回答1

0

ベストアンサー

コンソールに422が表示される理由がわかりません。

status: :unprocessable_entityと、自ら指定しています

投稿2021/06/30 08:23

maisumakun

総合スコア146018

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

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

maisumakun

2021/06/30 08:40

> もしくはコントローラーでstatus: :unprocessable_entityと設定しているので、表示されるのは問題ないのでしょうか? はい。
tenlife

2021/06/30 08:41

完全に勘違いしていることに気づけました。 ありがとうございます。
maisumakun

2021/06/30 08:42

400番代のリクエスト結果がコンソールに出てしまうのはどうしようもなさそうです。 https://teratail.com/questions/130541 (自分の過去質問:想定内の404が返るAPIを作った場合のお話)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問