0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rails7になってひっかかったことあれこれ(UnsafeRedirectError、jquery/bootstrapなど)

Last updated at Posted at 2022-12-18

Rails7になって日が浅いためか、いろいろと情報の混乱が多いので、ひっかかったところを備忘録的に

Jquery/Bootstrapの導入が面倒くさすぎる

Railsで一番面倒臭いと思ってる/思ってたのがJquery/Bootstrap導入。ほんとーーーーに面倒くさい。ここにあれをかけ、yarnでインストールしろ、ここにもあれをかけ、ほんでwebpackを使うかesbuild使うかえらびなはれ。おや、Rails7では違うようだねやりなおしや。どこいじったっけ。どうやって直せばいいんだっけ。表示おかしくなってるで。

あああああ

どうやって直せばいいのかわからなくなってしまったから、もう最初から作り直すハメになった。最初から作り直す方が早い始末だ。そもそもJqueryとBootstrapの導入でやる作業なんてちょっとおしゃれな感じの動要素を入れたいとかそんな程度で、なぜここまで面倒くさいのか。こんなバカバカしいことするくらいなら

app/views/layouts/application.html.erb
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

メタタグに直接書くこれでいい。マジで。

エレガントではなかろうし、いろいろ問題はあるかもしれないけど、少なくともこの方法はバージョンの違いとか全く関係ないし、現に動くし、バージョン変更もクソほど簡単だしでこれでいいんだ。もうつかれたよ。

UnsafeRedirectError

検索フォームでモデル検索したら出てきたエラー。

app/controllers/model_controller.rb
# パラメータを空白で分解して"+"で繋ぎなおせ
word = params[:find].split(/[[:blank:]]+/).select(&:present?).join('+')
# 繋ぎ直した文字列でアドレスにリダイレクト
redirect_to hoge_find_path + "?find" + word

ここで日本語を使うと、ActionController::Redirecting::UnsafeRedirectErrorというエラーを吐くようになった。

どうやら外部ホストにリダイレクトするような場合はセキュリティ的に止めているらしいが、別に外部ホストなんて送っていない。英数字で検索したときは問題ないことを考えると、マルチバイト文字がアドレスに含まれてると止められるっぽい。

ただこの対策は(よろしいかは別として)簡単で

app/controllers/model_controller.rb
redirect_to hoge_find_path + "?find" + word, allow_other_host: true

allow_other_host: trueというオプションを足せば通るようになった。少なくとも検索フォームで外部ホストどうこうもないんで、ここだけ指定する分には、まぁ大丈夫じゃないかなって気はする。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?