2016-08-17 2 views
0

AcitveAdmin은 색인 페이지의 맨 아래에 여러 가지 형식으로 모든 자원을 다운로드 할 수있는 링크를 제공하며 형식 중 하나는 CSV입니다. 모든 리소스를 가져 와서 CSV 파일에 넣은 다음 다시 보내주십시오. 내 상황에서, 내가 좋아하는, CSV를 통해 다운로드 할 수있는 특정 자원이 있다는 조건이 있습니다ActiveAdmin : CSV 형식으로 리소스를 모두 다운로드하는 동안 특정 리소스 세트를 보유하는 방법은 무엇입니까?

User.downloadables 

을하지만 CSV 형식으로 설정이 대신 User.all을 제공하는 방법을 알아낼 수없는거야?

필자는 문서를 살펴본 결과 CSV 파일의 레이아웃을 변경하는 것을 제외하고는별로 언급하지 않았습니다.

답변

1

, 나는 CSV 파일에 특정 레코드 집합을 통과 할 수있는 방법을 찾을 수 없습니다, 그래서 나는 ActiveAdmin을에 대한 사용자 정의 컨트롤러 방법을 쓰고, 그건 :

응용 프로그램/모델/user.rb :

scope :downloadables, -> { where(status: :downloadable) } 

def self.to_csv 
    downloadable_users = User.downloadables 
    CSV.generate do |csv| 
    csv << column_names 
    downloadable_users.each do |user| 
     csv << user.attributes.values_at(*column_names) 
    end 
    end 
end 

응용 프로그램/관리/user.rb : 지금

collection_action :download_csv do 
    redirect_to action: :download_csv 
end 

한 CSV 파일의 기록을 다운로드 할 수있을 것이다 통해 인덱스 페이지의 링크를 가지고 :

첫째, 우리가 CSV 파일을 다운로드 할 것입니다 징수 조치를 생성 :

마지막으로
action_item only: :index do 
    link_to "Download CSV", download_csv_admin_users_path 
end 

그리고 실제로 모델의 메소드를 호출하는 제어 방법이 있고, 마법의 나머지해야 할 일 :

controller do 
    def download_csv 
    respond_to do |format| 
     format.html { send_data User.to_csv, filename: "users-#{Data.today}.csv" } 
    end 
    end 
end 

그리고 그게 전부입니다. 그것은 효과가있다.

+0

정말 좋습니다. 하지만 다운로드 링크가'xml'과'json'으로 아래에 표시되고'csv' 다운로드 링크가 맨 위에 표시되기 때문에 좀 이상하게 보입니다. 페이지의 맨 아래에 다른 페이지로 표시하려면 어떻게해야합니까? 다른 기본 설정과 동일한 위치에 있음을 의미합니다. –

+0

@AlexVentura 분명히,이 목적을 위해 사용자 정의 스타일을 사용할 수 있습니다. –

+0

예이 링크를 기본 컨테이너와 동일한 컨테이너에 설정하는 방법은 알고 있지만 어떻게해야합니까? 'action_item'으로 메뉴 바에 나타납니다. 어떤 생각? –

0

활성 관리자의 CSV 내보내기도 사용자 정의 할 수 있습니다. 나는 그것을 성취하는 방법

ActiveAdmin.register Post do 
    csv force_quotes: true, col_sep: ';', column_names: false do 
    column :title 
    column(:author) { |post| post.author.full_name } 
    end 
end 

건배

분명히
+0

그게 제가 말한 것입니다. 문서 도구는 CSV 파일의 레이아웃을 변경하는 것에 대해 말하고 있으므로 답변을 알려줍니다. 필요한 것은 CSV 파일에 특정 리소스 집합을 저장하는 방법입니다. 형제 님의 대답에 감사드립니다. –