2017-12-27 2 views
0

Ich versuche zum ersten Mal verwenden .to_csv, und ich erhalte die Fehlermeldung undefined method 'to_csv' for #<Datum::ActiveRecord_Relation:0x007fd101f32f08> Did you mean? to_snicht definierte Methode `to_csv‘ Rails 5

ich mich umsah habe, und ich bin nicht sicher, ob es mein Code ist oder .to_csv ist nicht kompatibel mit Rails 5 (5.0.6 um genau zu sein)? Das Endziel ist, dass der Benutzer alle Datum-Daten auf der aktuellen Batch-Show-Seite herunterladen kann.

Alle Zeiger wären großartig!

application.rb

require File.expand_path('../boot', __FILE__) 
require 'csv' 
require 'uri' 
require 'net/http' 
require 'rails/all' 

models/batch.rb

class Batch < ApplicationRecord 
    belongs_to :user 


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

batches_controller.rb

def show 
    batch_id = params[:id] 
    @batch_name = Batch.find(batch_id).name 
    @data = Datum.where(batch_id: batch_id) 

    respond_to do |format| 
    format.html 
    format.csv { send_data @data.to_csv } 
    end 
end 

views/Chargen/show.html.erb

<%= link_to "CSV", batch_path(@batch, format: "csv") %> 
+8

Sie haben to_csv im Batch definiert, aber Sie rufen es auf Datum an. Du hast diese Klasse nicht gepostet, ist sie dort definiert? –

+0

@JacobVanus Heilige Guacamole, das ist es. Ich dachte, ich müsste auf Batches deklarieren, da ich es so nannte. Vielen Dank! – gwalshington

+0

@JacobVanus, die es behoben - wenn Sie als Lösung veröffentlichen möchten, werde ich akzeptieren – gwalshington

Antwort

1

Ich weiß nicht, ob es hilfreich sein könnte, aber haben Sie versucht, eine show.csv.erb in Ihrem app/views/batchs/folder zu erstellen?

EDIT:

Ich stelle fest, Sie Methode auf eine andere Klasse definieren to_csv. Ich kann annehmen Datum eine Beziehung ONE_TO_MANY mit Batch hat, wenn meine Überlegungen richtig sind versuchen, diese

Modelle/batch.rb

class Batch < ApplicationRecord 
    belongs_to :user 
    has_many :datums 

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

batches_controller.rb

def show 
    @batch = Batch.find(batch_id) 

    respond_to do |format| 
    format.html 
    format.csv { send_data @batch.to_csv } 
    end 
end 

Sie können jederzeit Namen abrufen, indem Sie @ batch.name

Verwandte Themen