💡
[Rails]フラッシュメッセージでURLを表示させる方法
フラッシュメッセージで表示させたいURLを取得する方法
フラッシュメッセージで表示させたいURLを取得する方法は複数ある。
- "コントローラーで作成した変数からURLを取得する場合"
- "直接URLの文字列をflash.now[:notice]に設定する場合"]
この二つのコントローラーへの書き方の違いでも、
viewへの書き方が違ってくる。
コントローラーでの定義の仕方も複数存在する。
controllerからみよう。
controller
-
データベースに保存されたURLを取得する場合
は、以下のように記述。
# controller
@event = Event.find(params[:id])
flash.now[:notice] = "URL: #{@event.url}"
- フォームから送信されたURLを取得する場合
# controller
flash.now[:notice] = "URL: #{params[:url]}"
view
- コントローラーで作成した@event変数からURLを取得する場合
def update
@event = Event.find(params[:id])
@event.update(event_params)
flash.now[:notice] = @event.url
render :show
end
# ビュー
<% if flash.now[:notice] =~ /https?:\/\/[\S]+/ %>
<% flash.now[:notice].scan(/https?:\/\/[\S]+/) do |url| %>
<p>参加用URL : <br />
<%= link_to url, url %></p>
<% end %>
<% else %>
<p class="mb-3"><%= flash.now[:notice] %></p>
<% end %>
- 直接URLの文字列をflash.now[:notice]に設定する場合
# コントローラー
def update
flash.now[:notice] = "https://example.com/event/1234"
render :show
end
# ビュー
<% if flash.now[:notice] =~ /https?:\/\/[\S]+/ %>
<% flash.now[:notice].scan(/https?:\/\/[\S]+/) do |url| %>
<p>参加用URL : <br />
<%= link_to url, url %></p>
<% end %>
<% else %>
<p class="mb-3"><%= flash.now[:notice] %></p>
<% end %>
共通点
両方とも正規表現を使っているが、
正規表現を使ってURLかどうかを判別し、URLの場合はリンク付きのメッセージを表示するようにしている。
正規表現は、文字列がhttps://またはhttp://で始まり、
その後に何らかの非空白文字が続くURLをマッチングします。
Discussion
🤟
✌️