2011-04-13 4 views
4

색인보기에서 현재 월 및 연도의 판매 트랜잭션을 표시하려고합니다.
이것은 내가 내 판매 컨트롤러에 넣어 한 것입니다 : 날짜가 날짜 데이터 형식 인 SalesHelperRails SQL 쿼리 월/일

def show_sales_for_current_month(sales) 
    sales = Sale.find(:all, 
        :conditions => ["MONTH(date) = ? AND YEAR(date) =?", 
            Date.today.month, Date.today.year]) 
end 

이 방법을 사용

def index 
@sales = show_sales_for_current_month(@sales) 

.

하지만 난 다음 컨트롤러 오류 받고 있어요 :

SQLite3::SQLException: no such function: MONTH: SELECT "sales".* FROM "sales" WHERE (MONTH(date) = 4 AND YEAR(date) =2011) 

내가 게시물에 주위를 검토 ​​한 결과는 그 정확한 기능입니다 것 같아를, 그래서 내가 잘못 뭐하는 거지? 감사!

답변

0

는 MySQL의에서이 작동하지만, 당신이의 strftime 함수를 사용하는 것을 의미 연도와 월의 sqlite3를 버전 사용하도록 쿼리를 수정해야합니다, 그래서 당신은 sqlite3를을 사용하고 있습니다 :

sales = Sale.find(:all, 
    :conditions => ["strftime('%m', date) = '?' AND strftime('%Y', date) = '?'", 
    '%02d' % Date.today.month, Date.today.year]) 
+0

감사합니다. 더 이상 오류가 발생하지 않지만 인덱스 페이지에 레코드가 나열되지 않고 검색 기준과 일치하는 레코드가 있습니다. 인덱스 페이지에서 일반적인 스캐 폴드 <% = @ sales.each do | sale |을 사용하고 있습니다. %> ... etc – NicSlim

+0

아마도 월과 일을 인용해야합니다. 나는 이것으로 나의 대답을 업데이트했다. –

+0

예, 이제 작동합니다. 마지막으로 알아야 할 것은 strftime ('% m', date)이 Date.today.month와 일치하도록하는 방법입니다. 왜냐하면 후자가 <10 – NicSlim

3

기능의 연도와 월을 SQLite3에는 존재하지 않습니다. 당신은 (내 현재 프로젝트에서 가져온)이 같은 접근 방식을 취할 수

모델 entry.rb :

def self.all_entries_year(year, user_id) 
    where('entries.user_id = :id', :id => user_id). 
    where(':first_day <= entries.date AND entries.date <= :last_day', { 
     :first_day => Date.new(year, 1, 1), 
     :last_day => Date.new(year, 12, 31) 
    }). 
    order('date desc') 
    end 

편집 :

이 모델이 넣어 : sales.rb (나는 가정, 그것은 내가 이러한 종류의 쿼리와 함께 당신을 도울 수 by_star라는 보석을 가지고, 안녕 필드 날짜)

def self.show_sales_for_current_month(year, month) 

    mydate = Date.new(year, month, 1) 

    where(':first_day <= sales.date AND sales.date <= :last_day', { 
        :first_day => mydate, 
        :last_day => mydate.at_end_of_month 
  }). 
    order('date') 
end 
+1

+1 용으로 – pilcrow

4

있습니다. 귀하의 경우에 당신은 단지 컨트롤러에서이 작업을 수행해야합니다 :

@sales = Sale.by_month 

by_star는 지저분한 SQL뿐만 아니라, 그것이 무엇 월 및 연도 운동을 담당한다.

+0

최고입니다. 그냥 그것을 추가하고 그것을 시도 줄 것이다. 감사! – NicSlim

+0

+1 Sargable. 시원한. – pilcrow

+0

굉장한 라이언 .... 언제나처럼! – abhijit