rails로 csv를 출력할 때view로 성형하는 게 더 쉽잖아요?
6177 단어 Rails
어떤 방법으로 빠르게 검색해 봤는데 csv 생성은 컨트롤러에 직접 쓰거나 모델에 정의된 방법
Model.to_csv(records)
을 만들 수 있는 코드가 많았다.하지만 csv는 html과 json처럼view로 쓰면 더 유창할 것 같아서 해봤어요.
app/controllers/users_controller.rb
class UsersController < ApplicationController
def index
@users = User.all
respond_to do |format|
format.html do
@users = @users.page params[:page]
end
format.csv do
send_data render_to_string, filename: "users-#{Time.now.to_date.to_s}.csv", type: :csv
end
end
end
end
app/views/users/index.csv.rubyrequire 'csv' # initializersとかに書いたほうがいいかも
CSV.generate do |csv|
cols = {
'ID' => ->(u){ u.id },
'姓名' => ->(u){ "#{u.last_name} #{u.first_name}" },
'性別' => ->(u){ u.sex },
'誕生日' => ->(u){ u.birthday.strftime('%Y年%m月%d日') },
'所持金' => ->(u){ number_to_currency u.money }
}
# header
csv << cols.keys
# body
@users.each do |user|
csv << cols.map{|k, col| col.call(user) }
end
end
# csvダウンロードへのリンクはこんなかんじで
= link_to 'Download CSV', users_path(format: :csv)
view의 템플릿을 .ruby
원본의 루비로 쓰고 controller 측면render_to_string
에서 문자열로 send_data
하여 응답 던지기.controller 측
format.csv
도 괜찮지만 이번에는 파일 이름을 지정하고 싶어서 이렇게 됐습니다.이번에는 표준 라이브러리
CSV
에 썼는데 템플릿은 원시적인 루비로 썼기 때문에 원하는 방식으로 쓸 수 있으면 좋지 않을까요.그리고 다른 디스플레이 항목의 csv도 필요하다고 생각하면 뷰를 쓴 후에 액션이 증가하고 렌더의view도 분리되어 증가하기 쉬우며 모델로 직접 쓰는 것보다 전망이 좋습니다.
투고 후 같은 게 나왔어요.라는 것을 알아차렸지만 개의치 않았다
Reference
이 문제에 관하여(rails로 csv를 출력할 때view로 성형하는 게 더 쉽잖아요?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ichi_s/items/eddf29d62ac09f6f9133텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)