0

Rails3 でプレゼンターを作成していて、ネストされたコンテンツ タグに問題がありました。コードの抜粋は次のとおりです。

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

私が見たソリューションの多くには の使用が含まれていまし"joins"たが、ここの content_tag は配列を返しません。のインスタンスを返していますが、そのオブジェクトのメソッドではありませんActiveSupport::SafeBuffer。しかし、そうです。#jointo_s

もちろん、これは配列である のcontent_tag内部にネストされており、もちろん、 Array で呼び出すことができるメソッドです。そしてhtmlをエスケープします。lesson.activities.collect#join#html_safe

これが他の誰かに役立つことを願っています!

于 2013-01-03T04:59:24.617 に答える