2011-10-17 7 views
1

나는 CSV를 사용하여 모든 데이터를 내보낼 수있는이 사이트를 보유하고 있습니다. "dataexport"라는 컨트롤러가 있으며 각 모델에 대한 메서드가 있습니다. 내 routes.rb 파일에는 다음과 같은 문자가 있습니다.더 많은 동적 경로?

match "export_checkouts", :to => "dataexport/checkouts_csv" 
match "export_committees", :to => "dataexport/committees_csv" 
match "export_libitems", :to => "dataexport/libitems_csv" 
match "export_locations", :to => "dataexport/locations_csv" 
match "export_logs", :to => "dataexport/logs_csv" 
match "export_patrons", :to => "dataexport/patrons_csv" 
match "export_products", :to => "dataexport/products_csv" 
match "export_questions", :to => "dataexport/questions_csv" 
match "export_reasons", :to => "dataexport/reasons_csv" 
match "export_roles", :to => "dataexport/roles_csv" 
match "export_sales", :to => "dataexport/sales_csv" 
match "export_shifts", :to => "dataexport/shifts_csv" 
match "export_tasks", :to => "dataexport/tasks_csv" 
match "export_tickets", :to => "dataexport/tickets_csv" 
match "export_types", :to => "dataexport/types_csv" 
match "export_users", :to => "dataexport/users_csv" 
match "export_visitors", :to => "dataexport/visitors_csv" 
match "export_years", :to => "dataexport/years_csv" 

더 동적 인 방법이 있습니까? 이것은 확실히 "건조한"패러다임에 반대하고 누군가가 이것으로 나를 도울 수 있는지 궁금해하고있었습니다. 모델 이름을 변수로 대체하여 한 줄로 처리 할 수 ​​있다고 생각했지만이 작업을 수행하는 방법을 잘 모릅니다.

답변

2

아닌 이유 :

match "export/:model", :to => "dataexport/export_csv" 

및 사용 PARAMS [: 모델]

class FooController < ApplicationController 
    def index 
    respond_to do |format| 
     format.html #This will load your standard html index view 
     format.csv { #CSV stuff goes here. Perhaps you can get it to load app/views/foo/index.csv.erb somehow } 
    end 
end 

이 여기에 대한 논의가 올바른 모델을 얻을 수는 다음 지시 데이터 내보내기 컨트롤러 export_csv 메소드는 모델에 CSV 형식의 데이터를 요청합니다.

class DataexportController do 
    def export_csv 
    params[:model].constantize.export_csv 
    end 
end 
1

이 작업을 시도 할 수 :

%w(checkouts committees).each do |model| 
    match "export_#{model}", :to => "dataexport/#{model}_csv" 
end 

은 분명히 당신이 필요로하는 모든 모델과 배열을 작성.

그러나 코드를 줄이면 경로가 계속 오염됩니다. 이 작업을 수행하는 레일스 방식이 더 많을 수도 있습니다.

레일즈가 지원하는 한 가지는 컨트롤러의 다른 형식에 응답하는 것입니다. 따라서 브라우저에서 JSON 형식을 요청하면 Rails에서 JSON 파일을 제공합니다 (코드를 작성하는 한). CSV 형식으로 동일한 작업을 수행 할 수있는 것처럼 들립니다.

"내보내기"로 정의하는 것은 실제로 정상적인 컨트롤러의 색인 방법입니다. HTML로 데이터를 표시하는 대신 CSV로 표시합니다. 나는이 사실을 직접 들여다 보지 못했고, 그래서 당신이 그것을 어떻게 할 것인지 정확히 알지 못합니다. 이런 식으로 뭔가 : http://weblog.rubyonrails.org/2006/12/19/using-custom-mime-types