2012-09-06 3 views
0

이것은 아마도 내 부분에 대한 엄청난 감독 일 것이다. 그러나 나는 운이없는 약 1 시간 동안의 수정을 찾고있다!데이터 객체의 배열을 원시 데이터로 변환

나는 내가 CSV는, 그러나

(params 객체를 파라미터)를 Ransack 쿼리에서 뱉어되는 데이터를오고 채우기 위해 사용하고있는 RailsCast tutorial on exporting data to .CSV

데이터를 다음하고는의 모음입니다 데이터 객체가 아닌 원시 데이터 자체 - 브라우저에서

출력 :

#<Order:0x007f820823c738>,#<Order:0x007f82082ad708>,#<Order:0x007f82082ace98>, 
#<Order:0x007f82082ac718> 

그리고 난 그냥 그 같은 객체를 얻으려고 노력하지만, 단지 RailsCasts 튜토리얼처럼 ... 인쇄하고는 (Screenshot)

다음

그래서 쉬운 방법으로이 내 Orders_Controller

def index 
    @search = Order.search(params[:q]) 
    @orders = @search.result 

    @results = @orders 

    respond_to do |format| 
    format.html # index.html.erb 
    format.csv { render text: @results.to_csv } 
    end 
end 

입니다 튜토리얼에서와 같이 해당 데이터 객체를 원시 문자열로 변환 하시겠습니까? @search.result는 주문의 배열, 그래서 @results.to_csvArray#to_csv 메소드를 호출한다 :

편집

여기에 그래서 나는이 문제라고 생각 내 모델

def self.to_csv(options = {}) 
    CSV.generate(options) do |csv| 
    csv << column_names 
    all.each do |order| 
     csv << order.attributes.values_at(*column_names) 
    end 
    end 
end 
+0

'to_csv' 메소드를 포함 시키십시오. 문제가있는 부분입니다. – Raphael

+0

좋아, 방금 포함 된 내 'to_csv' 메서드로 내 대답을 업데이트했습니다! – briankulp

+0

'@ search.result' 란 무엇입니까? 주문 배열, 또는 ...? – Raphael

답변

2

to_csv 방법이다. ActiveRecord::Relation을 얻지 못했기 때문에 아마도 csv로 다르게 변환해야합니다. 이 코드를 테스트하지 않았습니다

def index 
    @search = Order.search(params[:q]) 
    @orders = @search.result 

    respond_to do |format| 
    format.html # index.html.erb 
    format.csv { render text: RansackHelpers.to_csv(@search) } 
    end 
end 

를, 그래서 몇 가지 문제가있을 수 있습니다,하지만 난이 생각 :

module RansackHelpers 
    def self.to_csv(ransack_result, options = {}) 
    CSV.generate(options) do |csv| 
     result_array = ransack_result.result 
     column_names = result_array.first.class.column_names 
     csv << column_names 
     result_array.each do |item| 
     csv << item.attributes.values_at(*column_names) 
     end 
    end 
    end 
end 

orders_controller.rb에서 :

libransack_helpers.rb 모듈을 만들고 당신은 무엇을하길 원합니까.

+0

이 도우미 파일이 들어가 있습니까 '/ lib/assets /'? 또는'/ lib/tasks'? 아니면 그냥'helpers' 디렉토리에 있습니까? – briankulp

+0

'/ lib'에 넣거나 원하는 경우'/ lib'의 하위 디렉토리로 구성 할 수 있습니다. ref : http://stackoverflow.com/questions/4906932/how-to-create-and-use-a-module-using-ruby-on-rails-3 – Raphael

+0

좋아, 이제 도우미 파일을 참조하는 것 같습니다. 제대로, 그러나 내 컨트롤러에'RansackHelpers'를 포함 시키면 URL의 쿼리 매개 변수를 무시하고 아무런 레코드도 반환하지 않는 것 같습니다 (검색 매개 변수 내에 레코드가 있음에도 불구하고). 컨트롤러에서'include RansackHelpers'를 제거하면 쿼리 결과가 제대로 작동하지만 .CSV 형식의 라우트를 칠 때 '초기화되지 않은 상수 OrdersController :: RansackHelpers'가 나타납니다. 어떤 아이디어? 지금까지 BTW에 도움을 주셔서 대단히 감사합니다. 정말 감사! – briankulp