2017-06-18 99 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)的內容。