2
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 5 years have passed since last update.

Sinatraでエラーメッセージが表示されない問題

Posted at

今Sinatraを使って掲示板を作っているんですけど、エラーメッセージ実装で戸惑ったのであげておきます。

#前提
投稿フォームの入力欄はタイトルと本文。
どちらも空白は駄目です。

バリデーションで引っかかった際は投稿フォームに戻りエラーメッセージが表示されます。

エラー.png

こちらが実際に出来たページです。

#苦戦したところ
最初は「バリデーションに引っかかったらエラーメッセージを配列に入れてViewに渡せばいいだけだから簡単じゃん」と思っていました。

しかし、何故かViewで表示されない。
そこでデバッガで見てみるとどこかのタイミングで配列がnilになっていました。

それは表示されねえや!(笑)と思いながら原因を探りました。

#解決策
初めの僕のコードは以下のようになっていました。

post '/posts/create' do
  @post = Post.new(title: params[:title], body: params[:body])
  if @post.save
    redirect '/posts/page/1'
  else
    @errors = @post.errors.full_messages.uniq!
    redirect '/posts/new'
  end
end

redirectが問題でした。
redirectされるとアクションが呼び直されてしまうので@errorsがnilになってしまうのです。

ですので、redirectせずそのままViewファイルを渡してあげます。

post '/posts/create' do
  @post = Post.new(title: params[:title], body: params[:body])
  if @post.save
    redirect '/posts/page/1'
  else
    @errors = @post.errors.full_messages.uniq!
    erb :new_post
  end
end

これで無事エラーメッセージが表示されるようになりました。

#まとめ
今回はsinatraでエラーメッセージを表示させる方法についてまとめました。
sinatraは参考になるサイトも少ないので僕自身とても苦戦しています。
同じような環境の人の解決のきっかけになれれば幸いです。

2
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
2
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?