2013-05-21 4 views
3

Я работаю для экспорта данных csv из рельсов. Я следую учебник здесь: http://railscasts.com/episodes/362-exporting-csv-and-excel?view=asciicastЭкспорт CSV-данных из Rails

В мой контроллер у меня есть:

def show 
    # @company is being provided correctly. 
    @groups = @company.groups 
    render text: @groups.to_csv 
    end 

В моей group.rb модели:

def self.to_csv 
    Rails.logger.info "Hello World" 
    CSV.generate do |csv| 
     csv << column_names 
     all.each do |product| 
     csv << product.attributes.values_at(*column_names) 
     end 
    end 
    end 

Вопрос в том, что браузер выводит только следующее :

#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# 

Метод модели, по-видимому, игнорируется, даже после того, как ar перезапуск. Какие-нибудь идеи, что здесь не так? Спасибо

+0

также модель Rails.logger.info не входит в систему разработки nt log file .. – AnApprentice

ответ

8

to_csv - метод класса. Это означает, что он должен называться как Group.to_csv. Возможно, вы захотите изменить подпись метода на что-то вроде Group.to_csv(groups).

def self.to_csv(groups) 
    Rails.logger.info "Hello World" 
    CSV.generate do |csv| 
     csv << column_names 
     groups.each do |product| 
     csv << product.attributes.values_at(*column_names) 
     end 
    end 
    end 

Тогда в show

def show 
    # @company is being provided correctly. 
    @groups = @company.groups 
    render text: Group.to_csv(@groups) 
    end 
+3

Нет ничего плохого в использовании методов класса для ассоциаций. Rails позволяет вам это сделать. http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Named/ClassMethods.html –

0

я встретил эту проблему, которая уже была решена таким ответом: https://stackoverflow.com/a/17311372/3458781

Вскоре, вы должны перезагрузить сервер. Надеюсь, это сработает для вас.

0

Быстрая версия для рельсов консоли, которая не является для прода, но только, чтобы иметь доступ к данным в Excel:

первых делать:

print TableName.first.attributes.map{|a,v| a}.join(",") 

вторыми делать:

TableName.all.each{|t| print t.attributes.map{|a,v| a}.join(",") + "\n"}; nil 

скопируйте результат этого двух вызовов в файл csv

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