2014-08-28 3 views
0

Я строию приложение на рынке, поэтому продавцы могут перечислить предметы для продажи. Я пытаюсь загрузить CSV продавцом, чтобы продавцы могли загружать свои собственные списки.Rails 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 

Ваш код не делает действительно чувствовать, как вы выборки списки в контроллере, но никогда не будет повторно использоваться те неправдоподобным объектов и повторно вызывал БД в статических функциях вашей модели.

Смежные вопросы