我在Rails3中创建了一个Presenter,并且遇到嵌套内容标记的问题。代码摘录如下:
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>"]
答案 0 :(得分:1)
正如我所看到的那样,我找不到任何好的答案,为什么这不起作用,看到一系列问题没有得到答复或者没有为我工作。因此,在查看了我可用于Arrays和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没有返回数组。它返回ActiveSupport::SafeBuffer
的实例,而#join
不是该对象的方法。然而,to_s
是。
当然,这个content_tag
嵌套在lesson.activities.collect
内,这是一个数组,当然,#join
是一个可以在Array上调用的方法。并且#html_safe
逃脱了html。
希望这有助于其他人!