2014-08-28 60 views
0

我正在構建一個市場應用程序,以便賣家可以列出要銷售的物品。我正在嘗試下載賣家的CSV文件,以便賣家可以下載他們自己的物品。Rails 4 download to 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。