2012-12-06 5 views
5

나는 매일 created_at로 그룹화 된 비디오를 게시하는 루프를 만들려고합니다. 예를 들어일별 그룹화 Created_At

: -

12 월 5, 2012 - 비디오 9 비디오 8 비디오 7

12 월 4, 2012 - 5

2012년 12월 3일 비디오 6 비디오 비디오 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 %> 

나는 또한뿐만 아니라 그 날의 날짜를 표시하는 사업부를 얻을 필요가있다.

나는 주위를 검색하고 해결책을 찾지 못해서 group_by (가장 깨끗해 보였다)를 시도했지만 제대로 작동하지 못했습니다. 나는 몇 달 동안 그것을 만지지 않았기 때문에 나는 레일에서 조금 녹슬었다.

답변

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 (으)로 전화를 걸면 모든 시간 정보가 삭제되어 모든 항목을 효과적으로 그룹화합니다.

당신은 그것을 통해 루프는 같은 수 있습니다 :

<% @video_days.each do |day, videos| %> 
    <%= day.strftime("some format") %> 
    <% videos.each do |video| %> 
    <%= #output videos how you see fit %> 
    <% end %> 
<% end %> 
+0

가장 좋은 방법이라고 생각합니다. 고마워요! 그러나 strftime에 문제가 있습니다. 오류가 발생했습니다 : # 에 대해 정의되지 않은 메소드'strftime '. 정의되지 않은 메소드로 표시. –

+0

루프를 어떻게 구축하고 있습니까? 레일즈 콘솔에서 로컬로하고 있습니다 :'@video_days.each {| date, video | date.class}'그리고'Date'를 출력하고 있습니다. 그게 효과가있다. –

+0

흠 ... 나에게 구문 오류를 준다 | } 대신 –

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 %> 

그것은 당신에게 "날짜 : 비디오 제목"와 비디오 목록을 제공해야합니다 실제 달을.

1

(확실히이 필요 다시 인수 분해)

컨트롤러는 MySQL을 사용하고 비디오 당신이 논리를 파악하기 위해 다음 코드를 게시하고 제목을 속성이 추측 된

@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] } 

보기 당신은 t을 할 수

<% @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 당신은 일, 주에 의해 주문 허용, 시간