tagを使ってフラッシュメッセージを実装する
April 12, 2022
こんちには、たわらです。
久しぶりに個人開発をしていて、フラッシュメッセージを実装したのでそのメモです。
こんな感じでtag
メソッドを利用します。html をいい感じに生成してくれます。
tag ヘルパーの使い方
例を見ればだいたい理解できます。railsから拝借。
tag("br")
# => <br />
tag("br", nil, true)
# => <br>
tag("input", type: 'text', disabled: true)
# => <input type="text" disabled="disabled" />
tag("input", type: 'text', class: ["strong", "highlight"])
# => <input class="strong highlight" type="text" />
tag("img", src: "open & shut.png")
# => <img src="open & shut.png" />
tag("img", { src: "open & shut.png" }, false, false)
# => <img src="open & shut.png" />
tag("div", data: { name: 'Stephen', city_state: %w(Chicago IL) })
# => <div data-name="Stephen" data-city-state="["Chicago","IL"]" />
tag("div", class: { highlight: current_user.admin? })
# => <div class="highlight" />
フラッシュメッセージを実装する
tag
ヘルパーを利用して、フラッシュメッセージを実装するとこんな感じです。
css には TailwindCSS のコンポーネントライブラリであるdaisyUIを使ってます。適宜無視してください。
app/views/shared/_flash_message.html.slim
- flash.each do |message_type, message|
= tag.div(class: "alert alert-#{ message_type } shadow-lg")
= tag.p(message)
そして上記のパーシャルを view に読み込ませます。
application.html.slim
body
# 省略
= render 'shared/flash_message'
controller
はこんなかんじ。
def hoge
if @hoge.save
redirect_to works_path, success: '小説を投稿しました'
else
flash.now[:error] = '小説投稿に失敗しました'
render :new, status: :unprocessable_entity
end
end
参考文献