Pol*_*her 4 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
正如你所看到的,我有一个帮助器,我正在尝试渲染到视图中.
嵌套的content_tags不会呈现我对此标记的断开连接?
def draw_calendar(selected_month, month, current_date)
content_tag(:table) do
content_tag(:thead) do
content_tag(:tr) do
I18n.t(:"date.abbr_day_names").map{ |day| content_tag(:th, day, :escape => false) }
end #content_tag :tr
end #content_tag :thead
content_tag(:tbody) do
month.collect do |week|
content_tag(:tr, :class => "week") do
week.collect do |date|
content_tag(:td, :class => "day") do
content_tag(:div, date.day, :class => (Date.today == current_date ? "today" : nil))
end #content_tag :td
end #week.collect
end #content_tag :tr
end #month.collect
end #content_tag :tbody
end #content_tag :table
end #draw_calendar
Run Code Online (Sandbox Code Playgroud)
:::编辑:::
所以这是有效的.再次感谢mu太短了!
def draw_calendar(selected_month, month, current_date)
tags = []
content_tag(:table) do
tags << content_tag(:thead, content_tag(:tr, I18n.t("date.abbr_day_names").collect { |name| content_tag :th, name}.join.html_safe))
tags << content_tag(:tbody) do
month.collect do |week|
content_tag(:tr, :class => "week") do
week.collect do |date|
content_tag(:td, :class => "day") do
content_tag(:div, :class => (Date.today == current_date ? "today" : nil)) do
date.day.to_s
end #content_tag :div
end #content_tag :td
end.join.html_safe #week.collect
end #content_tag :tr
end.join.html_safe #month.collect
end #content_tag :tbody
tags.join.html_safe
end #content_tag :table
end #draw_calendar
Run Code Online (Sandbox Code Playgroud)
结束
你的问题是content_tag希望它的块返回一个字符串,你可以通过代码来查看它是否使用capturefrom CaptureHelper并忽略来自块的任何非字符串返回.
您需要将collects转换为字符串,如下所示:
content_tag(:tbody) do
month.collect do |week|
content_tag(:tr, :class => "week") do
week.collect do |date|
..
end.join.html_safe
end
end.join.html_safe
end
Run Code Online (Sandbox Code Playgroud)
例如,像这样的帮手:
content_tag(:table) do
content_tag(:thead) do
content_tag(:tr) do
[1,2,3,4].map do |i|
content_tag(:td) do
"pancakes #{i}"
end
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
生产:
<table>
<thead>
<tr></tr>
</thead>
</table>
Run Code Online (Sandbox Code Playgroud)
但添加.join.html_safe:
content_tag(:table) do
content_tag(:thead) do
content_tag(:tr) do
[1,2,3,4].map do |i|
content_tag(:td) do
"pancakes #{i}"
end
end.join.html_safe
end
end
end
Run Code Online (Sandbox Code Playgroud)
产生预期的:
<table>
<thead>
<tr>
<td>pancakes 1</td>
<td>pancakes 2</td>
<td>pancakes 3</td>
<td>pancakes 4</td>
</tr>
</thead>
</table>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3391 次 |
| 最近记录: |