content_tag输出意外结果

时间:2017-06-18 14:23:24

标签: ruby-on-rails content-tag

我的帮助器中有一个循环遍历一系列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,而是使用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)

2 个答案:

答案 0 :(得分:1)

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

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

但是,现在它还打印了所有activerecord对象的细节,但我认为这是另一个问题。 我得到的解决方案来自thoughtbot

更新: 好吧,我知道为什么它还会将对象的详细信息打印到视图中。正是因为这行代码:

=tutor_work_exp(@application)

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

所以,我把它改为:

- tutor_work_exp(@application)

现在完美无缺。

答案 1 :(得分:0)

tutor_work_exp(@application)返回一个数组。因此,使用视图中的每个循环来输出数组tutor_work_exp(@application)的内容。