【问题标题】:What approach do you take for embedding links in flash messages?您采用什么方法在 Flash 消息中嵌入链接?
【发布时间】:2009-08-26 02:05:41
【问题描述】:

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

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

Example Flash Message Notice with an Embedded Link http://img.skitch.com/20090826-xbsa4tb3sjq4fig9nmatakthx3.png (借自DailyMile.com

你会在控制器和视图之间采取什么策略来干净地使用这样的东西?

【问题讨论】:

    标签: ruby-on-rails actionpack


    【解决方案1】:

    只是想我会分享这个,因为找到了我在其他地方寻找的答案:

    在 Rails 3.1 上工作

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

    【讨论】:

    【解决方案2】:

    Glenn Gillen 有一种方法,他称之为Useful Flash Messages in Rails

    我将他的代码 sn-ps 修改为更符合习惯(至少对我而言)。

    控制器像这样填充闪存:

    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】:

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

    【讨论】:

    • 这几乎感觉像是太多的分离。另外,您在哪里管理应该链接到哪个对象或路径,而不依赖于部分中的类全局实例变量?
    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2011-12-30
    • 2011-03-22
    • 2021-04-06
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    相关资源
    最近更新 更多