2012-02-15 11 views
3

これを行う簡単な方法はありますか?htmlテーブル内のブレークアウト日付

コントローラ:

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 

これは私が/を探して取得しています出力されます:

これに追加

html table with year month day breakout

、私はまたつもりです次のようなものになります(これは次の行と次の行になります:

%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 

私はまだこの部分のコルパンなどを理解していません。私はこのようなことをするためのいくつかの魔法の道があると思っています。私はほとんどすべての提案に開放されています。

+0

なぜあなたは私の感謝を削除しますか?私はそれに反対していませんが、私はそれについて逃したルールがありますか? –

+1

ルールはありませんが、質問だけを肉に編集するのが一般的です。私は犯罪は意図されていないことを確信しています、そして誰もあなたが前もって感謝していないために失礼だと思うでしょう。 – Phrogz

+0

+1の楽しい問題(適切な意味のHTML; – Phrogz

答えて

3

Enumerable#group_byの力と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 

が生成されます

<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> 
+1

それは美しく、ありがとう!私はRubyを愛しています(そしてRailsですが、あなたの答えはRubyだと思います)。今私は、この質問の他の部分について正しい方向に私を指摘すると思います。もし私がそれを理解できないならば、私はそれを新しい質問にするだけです。 –

+0

@Toby喜んで助けて!それ以上の問題があれば、よりターゲットを絞った新しい質問をしてください。 :) – Phrogz

関連する問題