2016-08-23 5 views
0

오늘, 어제, 이번 주, 이번 달 등의 사용자 생성/삭제 횟수를 보여주는 대시 보드가 있습니다. 이 경우 컨트롤러에서이 개수와 모델의 범위를 얻기위한 조건을 작성했습니다. 위의 시나리오는 Rails 3.2에서 제대로 작동하지만 Rails 4.2에서는 작동하지 않습니다. 이 내 코드입니다 :Rails 4.2에서 사용자 수를 표시하는 시간 프레임이 작동하지 않습니다.

컨트롤러 :

protected 
    def get_user_counts(conditions = {}) 
    includes = [] 
    if conditions.empty? 
     # nothing 
    elsif conditions.keys.first.include?("accounts.") 
     includes = [:account] 
    end 

    result = [] 
    [ 
     {:label => 'today', :start => Time.zone.now.beginning_of_day, :end => Time.zone.now.end_of_day}, 
     {:label => 'yesterday', :start => 1.days.ago.beginning_of_day, :end => 1.days.ago.end_of_day}, 
     {:label => 'this week', :start => Time.zone.now.beginning_of_week, :end => Time.zone.now.end_of_week}, 
     {:label => 'last week', :start => 7.days.ago(Time.zone.now.beginning_of_week), :end => 7.days.ago(Time.zone.now.end_of_week)}, 
     {:label => 'this month', :start => Time.zone.now.beginning_of_month, :end => Time.zone.now.end_of_month}, 
     {:label => 'last month', :start => Time.zone.now.prev_month.beginning_of_month, :end => Time.zone.now.prev_month.end_of_month}, 
    ].each do |time_frame| 
     result << [time_frame[:label], User.includes(includes).where(conditions).only_deleted.deleted_between(time_frame[:start], time_frame[:end]).count, User.includes(includes).where(conditions).with_deleted.created_between(time_frame[:start], time_frame[:end]).count] 
    end 

    return result 
    end 

모델 :

scope :created_between, lambda { |start_at, end_at| 
    { :conditions => {'users.created_at' => (start_at..end_at)} } 
    } 
    scope :deleted_between, lambda { |start_at, end_at| 
    # Don't forget to use 'count_only_deleted' or 'find_only_deleted' in combination 
    # with this, or you'll always return zero users. :with_deleted and :only_deleted 
    # keys do not work in named_scope. 
    { :conditions => {'users.deleted_at' => (start_at..end_at)} } 
    } 

특히 모델의 범위에, 내 코드에 어떤 잘못이 아니면 수정이 필요하십니까? 도와주세요.

답변

0

문제는 범위와 관련이 있습니다. 레일 4의 범위에 대한로드가 제한되었습니다.

이 같이 당신의 범위를 변경할 수 있습니다

scope :created_between, -> (start_at, end_at) { where(created_at: (start_at..end_at)) }