在用户交互方面,具有嵌入链接的闪存消息(通知、错误、警告等)功能非常好。然而,从控制器中嵌入锚标签到闪存消息是不合适的。
我们假设像这样的闪存消息对可用性很有好处*:
带有嵌入链接的示例Flash消息通知 http://img.skitch.com/20090826-xbsa4tb3sjq4fig9nmatakthx3.png (来自DailyMile.com)
您会采取哪种策略在控制器和视图之间以清晰地实现此类效果?
在用户交互方面,具有嵌入链接的闪存消息(通知、错误、警告等)功能非常好。然而,从控制器中嵌入锚标签到闪存消息是不合适的。
我们假设像这样的闪存消息对可用性很有好处*:
带有嵌入链接的示例Flash消息通知 http://img.skitch.com/20090826-xbsa4tb3sjq4fig9nmatakthx3.png (来自DailyMile.com)
您会采取哪种策略在控制器和视图之间以清晰地实现此类效果?
我想分享一下,因为在其他地方找到了我正在寻找的答案:
适用于Rails 3.1。
flash[:notice] = "Proceed to #{view_context.link_to('login page', login_path)}".html_safe
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
助手)负责创建锚标签,但控制器管理闪存消息中包括可选的资源以进行进一步操作。
view_context
访问器。 - Ryan McGeary