【问题标题】:content_tag outputs unexpected resultscontent_tag 输出意外结果
【发布时间】:2017-06-18 14:23:23
【问题描述】:

我的助手中有一个方法,它循环遍历一组 activerecord 对象并打印每个项目的 p 标记。

def tutor_work_exp(application)
        work_exps = application.work_exps
        if work_exps.present?
            work_exps.collect do |work_exp|
                content_tag :p do
                    work_exp.detail
                end
            end
        end
 end

我已经阅读了 rails api,有人提到我不应该对 content_tag 使用 each 方法,而是使用 collect 方法。但是,我得到的结果是一个由多个字符串组成的数组,如下所示:

["<p>25 years of selling stuffs</p>", "<p>15 years of selling books and electronic stuffs</p>"]

不确定我在这里做错了什么。 这是我在视图中调用辅助方法的方式(顺便说一下,我使用的是haml):

.item
    .content
      .header
        %p Work Exp:
      .description.m-mini--top
        = tutor_work_exp(@application)

【问题讨论】:

  • collect 用对象创建一个新数组。
  • 感谢您的建议,但请参阅我更新的问题。它返回一个包含 p 标签的数组。

标签: ruby-on-rails content-tag


【解决方案1】:

好的,我通过将 content_tag 方法包装在 concat 方法中解决了这个问题,如下所示:

application.work_exps.each do |work_exp|
                concat(content_tag(:p, work_exp.detail))
            end

但是,现在它也打印了所有活动记录对象的详细信息,但我认为这是另一个问题。 我得到的解决方案来自thoughtbot

更新: 好的,我明白了它还将对象的详细信息打印到视图的原因。就是因为这行代码:

=tutor_work_exp(@application)

基本上,each 方法会自动返回调用它的对象本身。在我的例子中,它是一个活动记录对象数组,= 将打印返回的任何对象并将其放入视图中。您可以参考更多here

所以,我把它改成:

- tutor_work_exp(@application)

现在完美运行。

【讨论】:

    【解决方案2】:

    tutor_work_exp(@application) 返回一个数组。所以在视图中使用each循环来输出数组tutor_work_exp(@application)的内容。

    【讨论】:

      猜你喜欢
      • 2017-11-05
      • 2021-11-22
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2019-03-06
      相关资源
      最近更新 更多