21

从用户交互的角度来看,具有嵌入式链接的 Flash 消息(通知、错误、警告等)的能力很好。但是,在来自控制器的 flash 消息中嵌入锚标记是脏的。

让我们假设像这样的 Flash 消息对可用性有好处*:

带有嵌入式链接的示例 Flash 消息通知 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 Messages的方法。

我修改了他的代码片段,使其更具地道性(至少对我而言)。

控制器像这样填充闪光灯:

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帮助程序)负责创建锚标记,但控制器管理进入 flash 消息的内容,包括用于进一步操作的可选资源。

于 2009-08-26T15:00:15.353 回答
1

您可以创建一个辅助方法来根据在 Flash 消息中传回的值呈现部分。

于 2009-08-26T02:10:26.480 回答