みっきーの備忘録。

学んだことや思ったことなんかを色々と。

【Rails】 POSTで422 (Unprocessable Entity)エラー

解決したい事

user_contentsテーブルを扱うUserContentsControllerを新たに作り、動画の再生が終わったら非同期(ajax)で2つの情報を保存したい。

その際に、422 (Unprocessable Entity)エラーが起こる。

解決方法

RailsではデフォルトでCSRF対策をおこなっています。 CSRFトークンを発行せずにPOSTした場合に弾かれます。 なので、CSRFトークンを渡してあげる必要があります。

CSRF(クロスサイトリクエストフォージェリ)とは、Webアプリケーションの脆弱性またはその脆弱性を利用した攻撃方法です。 なりすましや覚えのない請求などの被害にあったりする危険性があります。

422 (Unprocessable Entity)

f:id:mikk0tan:20211022094656p:plain
エラーログ

パラメータにトークンを付与する

$.ajax(
           {
           headers: {
                  'X-Requested-With': 'XMLHttpRequest',
                  'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content') //CSRFトークンを取得・セット
            },
            url: '<%= myquest_content_user_contents_path(@quest,@content)%>',
            type: 'POST',
            data: {
                  user_contents: { video_time: document.getElementById('time').value }
                  //動画の時間をわたす。
             }
});

【Docker×Rails】Herokuデプロイ時にApplication error (error code=H10)

herokuデプロイ時にApplication error (error code=H10)と言われることがよくある。 そこで試したことをメモとして残しておく。

私の場合の結論

seedファイルを流し忘れていたのが大きな原因だった。 seedファイルを流し忘れるとなかなか求めているようなエラーが出ず大変だった。

その他間違えていたこと。

1つ目 herokuにmaster.keyを登録できていなかった。

2つ目 logsに ActionView::Template::Error (The asset "application.css" is not present in the asset pipeline.):というエラーがでた。

config/environments/production.rbのファイルを以下のように修正する。

- config.assets.compile = false
+ config.assets.compile = true

3つ目 herokuのView logsにActionView::Template::Error (Invalid CSS after "\@charset "utf-8"": expected "{", was ";"):というエラーがでていた。

cssファイルの一行目に@charset "utf-8" を持ってくると解決した。

おわりに

$ heroku logs$ heroku run rails c、herokuの再起動など色々試したけれどうまくエラーが出ず苦しんでいましたが、無事解決してよかったです。