0

我在 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>"]
4

1 回答 1

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

我看到的许多解决方案都包括 using "joins",但这里的 content_tag 没有返回数组。它返回一个实例ActiveSupport::SafeBuffer并且#join不是该对象的方法。to_s,然而,是。

当然,这content_tag是嵌套在 中的lesson.activities.collect,它是一个数组,当然#join也是一个可以在 Array 上调用的方法。并#html_safe转义html。

希望这对其他人有帮助!

于 2013-01-03T04:59:24.617 回答