2012-12-06 12 views
5

私は毎日、created_atによってグループ化されたビデオを投稿するためのループを作成しようとしています。例えばDays by Created_At

2012年12月5日 - ビデオ9 ビデオ8 ビデオ7

2012年12月4日 - ビデオ6 ビデオ5

2012年12月3日 - ビデオ4 ビデオ3 ビデオ2 ビデオ1

videos_controller:

def index 
    @title = 'Hip Hop Videos, Breaking News, Videos, And Funny Shxt | HOTDROPHIPHOP' 
    @description = '' 
    @videos = Video.all 
    @days = Video.where(:created_at == Time.today) 
    end 

ビューファイル:

<% @days.each do |day| %> 

    <div class="video-date">December 4, 2012</div> 

    <% @videos.each do |video| %> 
    <% end %> 

<% end %> 

は私も同様にその日の日付を表示するためにそのdiv要素を取得する必要があります。

私は検索して解決策を見つけることができず、group_by(最もきれいに見えました)を試しましたが、動作させることができませんでした。私は何ヶ月も触れていないので、私は自分のRailsで少し錆びています。

答えて

11

彼:@video_days{some_date_value: [{video1}, {video2}, etc], next_date_value: [{video3}, {video4}, etc], etc...}の形でハッシュされます

@videos = Video.where(Video.arel_table[:created_at].gteq(some_date_value)) 
@video_days = @videos.group_by {|video| video.created_at.to_date } 

created_atフィールドで.to_dateを呼び出しているため、すべての時間情報が削除され、1日ごとに効果的にグループ化されます。

あなたはそれをループは好きなことができます。

​​
+0

それを行う最善の方法のように見える、ありがとう!しかし、strftimeに問題があります。私にエラーを与える:#<列挙子:土、2012年12月1日:ステップ(木、2012年12月6日、1)>のための未定義のメソッド 'strftime '。未定義のメソッドとして表示します。 –

+0

どのようにループを構築していますか?私はレールコンソールでこれをローカルでやっています: '@video_days.each {| date、video | date.class} 'とし、' Date'を出力しています。それはうまくいくはずです。 –

+0

Hm ...私に構文エラーを与える| }の代わりに –

1

まず、今日のビデオのみを呼び出してから、すべてのビデオを実行するのは意味がありません。

私はそれをこのようにしようとするだろう:実際の月の:

コントローラ

@videos = Video.all(:conditions => ["created_at >= ?", Date.today.at_beginning_of_month]) 

ビュー

<% Date.today.at_beginning_of_month.upto(Date.today).each do |date| %> 
    <%= date %>: <%= @videos.select{|u| u.created_at == date }.title %> 
<% end %> 

それはあなたの "ビデオタイトル日付" とビデオのリストを与える必要があります。あなたはMySQLとビデオを使用している想定

1

は、私はロジックを把握するためにあなたを助けるために、次のコードを掲載していますタイトル 属性がある(確かにそれが再ファクタリング必要です)

コントローラ

@videos = {} 
videos = Video.order("DATE(created_at) DESC, title ASC").select("DATE(created_at) as created_at, title, id") 

videos.collect{|x| @videos[x.created_at.to_s] = @videos[x.created_at.to_s] ? @videos[x.created_at.to_s] << x.title : [x.title] } 

あなたがトンを行うことができますビュー

<% @videos.each do |posted_date, videos| %> 
    <div class="video-date"><%= Date.parse(posted_date.to_s).strftime("%b %d, %Y") %> </div> 
    <%= videos.join(", ") %> 
<% end %> 
2

最良の方法は、宝石を使用することですGroupdate

例えば

User.group_by_day(:created_at).countあなたは一日、一週間で注文できるようにし、時間

関連する問題