21

リンクが埋め込まれたフラッシュメッセージ(通知、エラー、警告など)を持つ機能は、ユーザーインタラクションの観点から優れています。ただし、コントローラからのフラッシュメッセージ内にアンカータグを埋め込むのは汚れています。

このようなフラッシュメッセージが使いやすさの向上に役立つと仮定しましょう*:

リンクが埋め込まれたフラッシュメッセージ通知の例http://img.skitch.com/20090826-xbsa4tb3sjq4fig9nmatakthx3.png(DailyMile.com から借用

このようなものをきれいに採用するために、コントローラーとビューの間でどのような戦術を取りますか?

4

3 に答える 3

24

他の場所で探していた答えが見つかったので、これを共有すると思いました:

レール3.1で動作

flash[:notice] = "Proceed to #{view_context.link_to('login page', login_path)}".html_safe
于 2011-08-04T16:01:45.433 に答える
8

Glenn Gillenは、 Rails での便利なフラッシュ メッセージと呼ばれるアプローチを採用しています。

私は彼のコード スニペットをもう少し慣用的なものに変更しました (少なくとも私にとっては)。

コントローラーは次のようにフラッシュを塗りつぶします。

flash[:notice]      = "Your profile was updated. %s"
flash[:notice_item] = ["Edit again?", edit_profile_path(@profile)]

次に、次のようなヘルパーを作成できます。

def render_flash_messages(*keys)
  messages = keys.collect do |key|
    content_tag(:p, flash_message_with_item(key), :class => "flash #{key}") if flash[key]
  end.join
  content_tag(:div, messages, :id => "flash_messages") unless messages.blank?
end

def flash_message_with_item(key)
  item = flash["#{key}_item".to_sym]
  substitution = item.is_a?(Array) ? link_to(*item) : item
  flash[key] % substitution
end

ビューは次のようになります。

<%= render_flash_messages(:error, :notice, :warning) %>

ビューは (flash_message_with_itemヘルパーを介して) アンカー タグの作成を担当しますが、コントローラーは、さらなるアクションのためのオプションのリソースを含むフラッシュ メッセージに入る内容を管理します。

于 2009-08-26T15:00:15.353 に答える
1

フラッシュメッセージで返された値に基づいてパーシャルをレンダリングするヘルパーメソッドを作成できます。

于 2009-08-26T02:10:26.480 に答える