2014-08-28 4 views
0

저는 판매 인이 판매 할 품목을 나열 할 수 있도록 마켓 플레이스 앱을 구축 중입니다. 판매자가 자신의 목록을 다운로드 할 수 있도록 판매자별로 CSV를 다운로드하려고합니다.레일 4 CSV로 다운로드

다음 코드의 내용은 railscast입니다. railscasts 코드를 그대로 작동하도록했습니다. 내 모델의 모든 데이터를 csv로 다운로드합니다. 그러나 판매자 필터를 쿼리에 추가하면 필터가 적용되지 않습니다. listings_controller에서

:

def index 
    @listings = Listing.not_expired.order("created_at DESC") 
    respond_to do |format| 
     format.html 
     format.csv { send_data @listings.to_csv } 
    end 
end 

def seller 
    @listings = Listing.where(user: current_user).order("created_at DESC") 
    respond_to do |format| 
    format.html 
    format.csv { send_data @listings.seller_csv } 
    end 
end 

listing.rb에서 :

def self.to_csv 
    CSV.generate do |csv| 
    csv << column_names 
    all.each do |listing| 
     csv << listing.attributes.values_at(*column_names) 
    end 
    end 
end 

def self.seller_csv 
    CSV.generate do |csv| 
    csv << column_names 
    where(user: current_user).each do |listing| 
     csv << listing.attributes.values_at(*column_names) 
    end 
    end 
end 

to_csv 방법은 벌금과 다운로드 모든 명부 작성을 작동합니다. 그러나 seller_csv 메소드는 모든 목록을 다운로드합니다. current_user로 필터링해야합니다. 내가 뭘 놓치고 있니?

답변

2

함수에 매개 변수로 목록을 나열하십시오. 당신이 당신의 컨트롤러 목록을 가져 오는 그러나 않았다으로

def self.to_csv(listings) 
    CSV.generate do |csv| 
    csv << column_names 
    listings.each do |listing| 
     csv << listing.attributes.values_at(*column_names) 
    end 
    end 
end 

는 그런 지팡이 정말

def index 
    @listings = Listing.not_expired.order("created_at DESC") 
    respond_to do |format| 
     format.html 
     format.csv { send_data Listing.to_csv(@listings) } 
    end 
end 

def seller 
    @listings = Listing.where(user: current_user).order("created_at DESC") 
    respond_to do |format| 
    format.html 
    format.csv { send_data Listing.to_csv(@listings) } 
    end 
end 

귀하의 코드는하지 않았다 두 시나리오에서 동일한 기능을 다시 사용 감지하는 인출을 다시하지-사용 모델의 정적 함수에서 DB를 다시 호출했습니다.