1

我正忙着观看演示者的 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?

4

2 回答 2

2

似乎您应该将数组加入字符串并调用html_safe

return s.join.html_safe

原始

= raw(uploads_presenter.display_faulty_uploads.join)
于 2015-03-26T13:11:59.243 回答
2

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

更具体的细节sanitize可以在这里找到。

这应该解决:

= sanitize(uploads_presenter.display_faulty_uploads.join)
于 2019-08-18T04:26:12.293 回答