html 表格中的突破日期

发布于 2025-01-06 02:28:29 字数 1557 浏览 0 评论 0 原文

有没有更简单的方法来做到这一点?

控制器:

def index
  @ranches = Ranch.all
  dates = (Date.today..Date.today + 52.weeks).select(&:sunday?)
  @date_range = dates
  dates.each do |date|
    month = date.strftime("%b")
    year = date.strftime("%Y")
    @dates ||= {}
    @dates[year] ||= {}
    @dates[year][month] ||= []
    @dates[year][month] << date
  end

视图:

%table{:border => 1}
  %thead
    %tr
      %th{:rowspan => 3}
        Ranch
      - @dates.each do |year,months|
        -# raise months.inspect
        %th{:colspan => months.collect{|m| m[1]}.flatten.count }
          = year
    %tr
      - @dates.each do |year,months|
        - months.each do |month, days|
          %th{:colspan => days.count}
            = month
    %tr
      - @dates.each do |year,months|
        - months.each do |month, days|
          - days.each do |day|
            %th
              = day.day

这是我正在获取/寻找的输出:

添加到此,我也将像下面这样(这将是下一行和后续行:

%tbody
  - @ranches.each do |ranch|
    %tr
      %td
        = ranch.name
      - ranch.placements.each do |placement|
        - @date_range.each do |date|
          - start_date = date
          - end_date = date.end_of_week
          - if (start_date..end_date).include?(placement.placement_date)
            %td
              = placement.value 

我还没有弄清楚这部分的 colspan 等。我希望有一些神奇的 Rails 方法来完成这些事情,所以它看起来我的态度更好,工作也更好。对于大多数建议。

Is there an easier way to do this?

controller:

def index
  @ranches = Ranch.all
  dates = (Date.today..Date.today + 52.weeks).select(&:sunday?)
  @date_range = dates
  dates.each do |date|
    month = date.strftime("%b")
    year = date.strftime("%Y")
    @dates ||= {}
    @dates[year] ||= {}
    @dates[year][month] ||= []
    @dates[year][month] << date
  end

view:

%table{:border => 1}
  %thead
    %tr
      %th{:rowspan => 3}
        Ranch
      - @dates.each do |year,months|
        -# raise months.inspect
        %th{:colspan => months.collect{|m| m[1]}.flatten.count }
          = year
    %tr
      - @dates.each do |year,months|
        - months.each do |month, days|
          %th{:colspan => days.count}
            = month
    %tr
      - @dates.each do |year,months|
        - months.each do |month, days|
          - days.each do |day|
            %th
              = day.day

This is the output I am getting / looking for:

html table with year month day breakout

Adding to this, I am also going to be something like the following (this will be the next and following rows:

%tbody
  - @ranches.each do |ranch|
    %tr
      %td
        = ranch.name
      - ranch.placements.each do |placement|
        - @date_range.each do |date|
          - start_date = date
          - end_date = date.end_of_week
          - if (start_date..end_date).include?(placement.placement_date)
            %td
              = placement.value 

I have not figured out the colspan, etc for this part yet. I am hoping there is some magical rails way to do this stuff so it looks better and works better. I am open to most any suggestion.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

日久见人心 2025-01-13 02:28:29

看看 Enumerable#group_byEnumerable#chunk

require 'date'
require 'haml'

now = Date.today
next_sunday = now - now.wday + 7
@sundays = (0...52).map { |w| next_sunday + 7*w }

puts Haml::Engine.new(<<ENDHAML).render(binding)
%table
  %thead
    %tr
      - @sundays.group_by(&:year).each do |year,days|
        %th{colspan:days.length}= year
    %tr
      - @sundays.chunk{ |d| d.strftime('%b') }.each do |month,days|
        %th{colspan:days.length}= month
    %tr
      - @sundays.each do |date|
        %th= date.day
ENDHAML

生产:

<table>
  <thead>
    <tr>
      <th colspan='46'>2012</th>
      <th colspan='6'>2013</th>
    </tr>
    <tr>
      <th colspan='2'>Feb</th>
      <th colspan='4'>Mar</th>
      <th colspan='5'>Apr</th>
      <th colspan='4'>May</th>
      <th colspan='4'>Jun</th>
      <th colspan='5'>Jul</th>
      <th colspan='4'>Aug</th>
      <th colspan='5'>Sep</th>
      <th colspan='4'>Oct</th>
      <th colspan='4'>Nov</th>
      <th colspan='5'>Dec</th>
      <th colspan='4'>Jan</th>
      <th colspan='2'>Feb</th>
    </tr>
    <tr>
      <th>19</th>
      <th>26</th>
      <th>4</th>
      <th>11</th>
      <th>18</th>
      <th>25</th>
      <th>1</th>
      <th>8</th>
      <th>15</th>
      <th>22</th>
      <th>29</th>
      <th>6</th>
      <th>13</th>
      <th>20</th>
      <th>27</th>
      <th>3</th>
      <th>10</th>
      <th>17</th>
      <th>24</th>
      <th>1</th>
      <th>8</th>
      <th>15</th>
      <th>22</th>
      <th>29</th>
      <th>5</th>
      <th>12</th>
      <th>19</th>
      <th>26</th>
      <th>2</th>
      <th>9</th>
      <th>16</th>
      <th>23</th>
      <th>30</th>
      <th>7</th>
      <th>14</th>
      <th>21</th>
      <th>28</th>
      <th>4</th>
      <th>11</th>
      <th>18</th>
      <th>25</th>
      <th>2</th>
      <th>9</th>
      <th>16</th>
      <th>23</th>
      <th>30</th>
      <th>6</th>
      <th>13</th>
      <th>20</th>
      <th>27</th>
      <th>3</th>
      <th>10</th>
    </tr>
  </thead>
</table>

Behold the power of Enumerable#group_by and Enumerable#chunk!

require 'date'
require 'haml'

now = Date.today
next_sunday = now - now.wday + 7
@sundays = (0...52).map { |w| next_sunday + 7*w }

puts Haml::Engine.new(<<ENDHAML).render(binding)
%table
  %thead
    %tr
      - @sundays.group_by(&:year).each do |year,days|
        %th{colspan:days.length}= year
    %tr
      - @sundays.chunk{ |d| d.strftime('%b') }.each do |month,days|
        %th{colspan:days.length}= month
    %tr
      - @sundays.each do |date|
        %th= date.day
ENDHAML

Produces:

<table>
  <thead>
    <tr>
      <th colspan='46'>2012</th>
      <th colspan='6'>2013</th>
    </tr>
    <tr>
      <th colspan='2'>Feb</th>
      <th colspan='4'>Mar</th>
      <th colspan='5'>Apr</th>
      <th colspan='4'>May</th>
      <th colspan='4'>Jun</th>
      <th colspan='5'>Jul</th>
      <th colspan='4'>Aug</th>
      <th colspan='5'>Sep</th>
      <th colspan='4'>Oct</th>
      <th colspan='4'>Nov</th>
      <th colspan='5'>Dec</th>
      <th colspan='4'>Jan</th>
      <th colspan='2'>Feb</th>
    </tr>
    <tr>
      <th>19</th>
      <th>26</th>
      <th>4</th>
      <th>11</th>
      <th>18</th>
      <th>25</th>
      <th>1</th>
      <th>8</th>
      <th>15</th>
      <th>22</th>
      <th>29</th>
      <th>6</th>
      <th>13</th>
      <th>20</th>
      <th>27</th>
      <th>3</th>
      <th>10</th>
      <th>17</th>
      <th>24</th>
      <th>1</th>
      <th>8</th>
      <th>15</th>
      <th>22</th>
      <th>29</th>
      <th>5</th>
      <th>12</th>
      <th>19</th>
      <th>26</th>
      <th>2</th>
      <th>9</th>
      <th>16</th>
      <th>23</th>
      <th>30</th>
      <th>7</th>
      <th>14</th>
      <th>21</th>
      <th>28</th>
      <th>4</th>
      <th>11</th>
      <th>18</th>
      <th>25</th>
      <th>2</th>
      <th>9</th>
      <th>16</th>
      <th>23</th>
      <th>30</th>
      <th>6</th>
      <th>13</th>
      <th>20</th>
      <th>27</th>
      <th>3</th>
      <th>10</th>
    </tr>
  </thead>
</table>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文