【问题标题】:Rails rendering a collection of partials from a presenter methodRails 从演示者方法渲染部分集合
【发布时间】:2015-05-30 12:10:33
【问题描述】:

我正忙着观看演示者的 Rail 演员表,并想重构我的一位演示者以包含页面模板。

我正在观看的截屏视频是287-presenters-from-scratch

我已经按照他建议的方式初始化了一个演示者,并在应用程序帮助文件中创建了一个帮助方法..

我试图与演示者一起构建的视图是一个通知模板,它与许多上传的页面共享。

由于您一次可以上传多个文件,我们可能会收到一些通知,或者每种通知中的几个。上传成功和完成上传的数据,而一些损坏的上传可能需要新的导入模板,其他错误的上传可能需要修复。通过演示者的通知视图如下所示。

- present_upload(host, current_account, current_user, context) do |uploads_presenter|
  .pending_uploads
    = uploads_presenter.display_pending_uploads 

  .faulty_uploads
    = uploads_presenter.display_faulty_uploads

  .corrupt_uploads    
    = uploads_presenter.display_corrupt_uploads

  .completed_uploads
    = uploads_presenter.display_complete_uploads

  .successful_uploads
    = uploads_presenter.display_successful_uploads

演示者的示例

class UploadsPresenter 
  attr_reader :host, :user, :account, :context

  def initialize(host, current_account, user, context, template)
    @host = host
    @user = user
    @account = current_account
    @context = context
    @template = template
  end

  def h
    @template
  end

  def display_pending_uploads
    return unless uploads_pending?
    s = []
    pending_uploads.each do |upload|
      s << h.render(partial: 'upload/pending_upload', locals: {upload: upload})
    end
    return s
  end

  def display_complete_uploads
    return unless uploads_complete?
    s = []
    completed_uploads.each do |upload|
      s << h.render(partial: 'upload/complete_upload', locals: {upload: upload})
    end
    return s
  end

  ...
end

只有这个被呈现在页面上。它不是将它转换为可读的 html,而是作为一个已转换为字符串的数组??

我尝试调用return s.join,但这只是将数组中的内容转换为字符串,但这会以相同的方式呈现减去数组符号。

然后如何从演示者渲染部分内容,以便它们在视图中显示为 html?

【问题讨论】:

    标签: html ruby-on-rails render presenter


    【解决方案1】:

    看来你应该将数组加入字符串并调用html_safe

    return s.join.html_safe
    

    raw:

    = raw(uploads_presenter.display_faulty_uploads.join)
    

    【讨论】:

    • 非常感谢!这正是我想要的。原始方法非常棒!
    【解决方案2】:

    我遇到了一个类似的问题,发现这个答案很有帮助,所以想在这里分享我的发现。 我建议使用sanitize 而不是html_saferawhtml_saferaw 都假定并标记您的 html 是安全的,而无需实际验证它们,这种行为可能导致 XSS(跨站点脚本)漏洞。

    sanitize的更多具体细节可以找到here

    这应该可以解决:

    = sanitize(uploads_presenter.display_faulty_uploads.join)
    

    【讨论】:

      猜你喜欢
      • 2015-10-22
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2014-12-22
      • 1970-01-01
      • 2013-03-24
      • 2023-03-13
      相关资源
      最近更新 更多