ruby-on-rails - 返回率 |如何让 content_tags 嵌套?

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

正如您所看到的,我有一个助手,我正在尝试将其呈现给 View 。

嵌套的 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

:::编辑:::

所以这是有效的。再次感谢 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

结束

最佳答案

你的问题是content_tag希望它的 block 返回一个字符串,您可以跟踪代码以查看它使用 capture来自 CaptureHelper 并忽略从该 block 返回的任何非字符串。

你需要把你的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

例如,像这样的助手:

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

产生:

<table>
    <thead>
        <tr></tr>
    </thead>
</table>

但添加 .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

产生预期的:

<table>
    <thead>
        <tr>
            <td>pancakes 1</td>
            <td>pancakes 2</td>
            <td>pancakes 3</td>
            <td>pancakes 4</td>
        </tr>
    </thead>
</table>

关于ruby-on-rails - 返回率 |如何让 content_tags 嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10844277/

相关文章:

ruby-on-rails - 如何验证服务器SSL证书?

ruby-on-rails - 运行 Rails + Sidekiq 的 2 台服务器使用相同的 redis 服务器会导致意外行为吗?

ruby - 设置 Heroku 调试轨道运行器

javascript - 如何在 Rails 3 中使用确认对话框远程删除后调用 JavaScript 函数

ruby-on-rails - 缩写模型的Rails非正统命名

javascript - Rails View 中的 Json 对象

ruby-on-rails - 如何在 Ruby 中正确使用 guard 子句

ruby - 什么是 Perl 等同于 Ruby 的 Pry

ruby-on-rails - 使用 fb_graph 从 Rails 3 发布到 Facebook 粉丝页面

ruby-on-rails-3 - 如何开发允许用户向文本文件添加标记的Webapp?