2017-01-10 3 views
0

J'utilise la classe CSV pour convertir des données dans un fichier Excel basé sur http://railscasts.com/episodes/362-exporting-csv-and-excel.Comment convertir des données dans un fichier Excel

Lors du téléchargement du fichier Excel, il n'est pas mis à jour avec les dernières données que je vois sur ma page Web en utilisant des filtres. Mon fichier Excel contient des données qui sont affichées lors du premier chargement de la page.

J'ai essayé de déboguer le problème et a essayé d'autres pierres précieuses comme xlsx_writer, obtenir le même résultat:

def commission_report 
    today = Date.today 
    if params[:from_date].present? 
    from_date = params[:from_date] 
    to_date = params[:to_date] 
    elsif params[:filter] == 'monthly' 
    to_date = today 
    from_date = today - 30 
    else 
    to_date = today 
    from_date = today - 7 
    end 
    @commissions_report = UserOrderHistory.select("user_order_histories.*,SUM(user_order_histories.revenue_sharing) as revenue_total, restaurants.restaurant_name, managers.username,revenue_sharings.revenue").joins("LEFT JOIN revenue_sharings ON revenue_sharings.restaurant_id = user_order_histories.restaurant_id").joins("LEFT JOIN restaurants ON restaurants.id = user_order_histories.restaurant_id").joins("LEFT JOIN managers ON managers.id = restaurants.manager_id").where("user_order_histories.status != ''").where("revenue_sharing > 0").group("user_order_histories.restaurant_id,user_order_histories.deduction_date").where("user_order_histories.deduction_date BETWEEN ? AND ?",from_date,to_date).order(sort_column + " " + sort_direction) 
    @commissions_report = @commissions_report.as_json 
    @commissions_report = Kaminari.paginate_array(@commissions_report).page(params[:page]).per(10) 
    # raise @commissions.inspect 
    respond_to do |format| 
    format.html 
    format.csv { send_data @commissions_report.to_csv } 
    format.xls #{ send_data @commissions_report.to_csv(col_sep:  "\t") } 
    end 

end 
+0

Il semble que les mêmes filtres ne sont pas appliqués à l'exportation de données. Vérifiez que :) –

Répondre

1

Lorsque vous faites la demande filtrée pour télécharger le CSV, les params ne sont pas en cours d'analyse:

<%= link_to 'Download CSV', your_path(from_date: params[:from_date], to_date: params[:to_date], filter: params[:filter]) %> 

De cette façon, vos params seront à nouveau sont renvoyés à votre contrôleur .

+0

= link_to 'Mensuel', commission_report_path (filtre: 'mensuel'), classe: 'btn btn-secondaire-contour add_hotel_btn' = lien_à 'Weekly', commission_report_path (filtre: 'weekly'), classe: ' btn btn-secondary-outline add_hotel_btn '. Il ne fonctionne même pas pour le filtre hebdomadaire ou mensuel Je passe seulement ces paramètres – bhupinder

+0

@bhupinder obtenez-vous les paramètres corrects dans le filtre? avez-vous un débogueur comme 'pry' ou' byebug'? –

1

C'est parce que lorsque vous cliquez sur:

link_to "CSV", products_path(format: "csv") 

Il va à la méthode d'index les contrôleurs de produits et dans cette méthode, vous récupérez à nouveau tous les enregistrements de la base de données:

@products = Product.order(:name) 

Donc tout ce que vous avez à faire est de passer la collection de produits filtrés au format CSV répondre. Quelque chose comme ceci:

format.csv { send_data @filtered_products.to_csv }