2013-01-03 114 views
0

我在Rails3中創建了一個Presenter,並且遇到了嵌套內容標記的問題。 A碼摘錄低於:在表格中嵌套content_tag不能轉義html

def lesson_activity_row 
    lesson.activities.collect do |lesson_activity| 
    content_tag :tr do 
     concat(content_tag :td, lesson_activity.activity 
     concat(content_tag :td, lesson_activity.duration 
     concat(content_tag :td, lesson_activity.agent 
    end 
    end 
end 

在我看來,我會得到如下:

["<tr><td>New Activity</td><td>5 Minutes</td><td>Teacher</td></tr>", "<tr><td>New Activity</td><td>5 Minutes</td><td>Teacher</td></tr>"] 

回答

1

正如我一直在尋找,我真的無法找到任何好的答案,爲什麼這WASN」沒有工作,看到一些問題沒有得到解答或者不適合我。所以,看這些方法後,我不得不可供陣列和的ActiveSupport :: SafeBuffer,我想出了下面這工作:

def lesson_activity_row 
    lesson.activities.collect do |lesson_activity| 
    content_tag :tr do 
     concat(content_tag :td, lesson_activity.activity 
     concat(content_tag :td, lesson_activity.duration 
     concat(content_tag :td, lesson_activity.agent 
    end.to_s #note the to_s 
    end.join.html_safe #note join.html_safe 
end 

許多使用"joins"我看到包括解決方案,但content_tag這裏ISN」返回一個數組。它返回的是ActiveSupport::SafeBuffer的實例,而#join不是該對象的方法。然而,to_s是。

當然,這個content_tag嵌套在lesson.activities.collect裏面,這是一個數組,當然,#join是一個可以在Array上調用的方法。 #html_safe轉義的HTML。

希望這可以幫助別人!