您采取什么方法将链接嵌入Flash消息中?

21
3个回答

24

我想分享一下,因为在其他地方找到了我正在寻找的答案:

适用于Rails 3.1。

flash[:notice] = "Proceed to #{view_context.link_to('login page', login_path)}".html_safe

将其作为新的被接受答案。这比我之前采取的方法更清晰。我不知道 view_context 访问器。 - Ryan McGeary
2
view_context 在所有的 Rails 3 版本中都可以使用。根据 http://apidock.com/rails/AbstractController/Rendering/view_context 的介绍,它是在 3.0.0 中引入的。 - Slobodan Kovacevic

8

Glenn Gillen 提出了一种他称之为Rails中有用的闪现信息(Useful Flash Messages in 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助手)负责创建锚标签,但控制器管理闪存消息中包括可选的资源以进行进一步操作。


3
我本希望得到更加精明的建议,但现在我会采取这种方法。 - Ryan McGeary

1
你可以创建一个帮助方法,根据flash消息返回的值来渲染部分视图。

这几乎感觉分离得太多了。此外,在不依赖于局部变量的情况下,您在哪里管理应链接到哪个对象或路径? - Ryan McGeary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接