2017-06-18 98 views
0

我有一个方法在我的帮助器中循环访问activerecord对象数组并打印每个项目的p标记。content_tag输出意外的结果

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) 
+0

collect用对象创建一个新数组。 – Ravi

+0

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

回答

1

好吧,我通过包装concat方法是这样的内部content_tag方法解决了这个问题:

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) 

现在可以完美运行。

0

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