ホーリー、このアプローチを共有してくれてありがとう。それは私にとって魅力のように機能します。可能であれば投票しますが、これは私の最初の投稿なので、適切な評判に欠けています...パズルへの追加のピースとして:私があなたのアプローチで認識した問題は、それが内部からはまだ機能しないことですコントローラ。私はいくつかの調査を行い、あなたのアプローチをルビーポンドのグレンからのものと組み合わせました。
これが私が思いついたものです:
ヘルパーを表示します。例:application_helper.rb
def render_flash_messages
messages = flash.collect do |key, value|
content_tag(:div, flash_message_with_link(key, value), :class => "flash #{key}") unless key.to_s =~ /_link$/i
end
messages.join.html_safe
end
def flash_message_with_link(key, value)
link = flash["#{key}_link".to_sym]
link.nil? ? value : string_with_link(value, link).html_safe
end
# Converts
# "string with __link__ in the middle." to
# "string with #{link_to('link', link_url, link_options)} in the middle."
# --> see http://stackoverflow.com/questions/2543936/rails-i18n-translating-text-with-links-inside (holli)
def string_with_link(str, link_url, link_options = {})
match = str.match(/__([^_]{2,30})__/)
if !match.blank?
$` + link_to($1, link_url, link_options) + $'
else
raise "string_with_link: No place for __link__ given in #{str}" if Rails.env.test?
nil
end
end
コントローラで:
flash.now[:alert] = t("path.to.translation")
flash.now[:alert_link] = here_comes_the_link_path # or _url
locale.ymlで:
path:
to:
translation: "string with __link__ in the middle"
ビューで:
<%= render_flash_messages %>
この投稿が私をあなたに投票するという評判を獲得してくれることを願っています、holli :)どんなフィードバックでも大歓迎です。