現在、勤務形態のアプリを作成しております。
写真のように、ボタンを押すと、該当職員の勤務形態ががCSVに書き込まれるという内容なのですが、
カラムの取得方法がわからない状況です。
取得したいカラムとしては、「woked_on(出勤日)]「started_at(出勤時間)「finished_at(退勤時間)」で、
モデルはuserとattenndance(勤怠)で、1対多の関係です。
attendance.rbに記載したdef self.to_csv内のvalues = []に該当カラムを入れるのだとは思いますが、
スクショのようなエラーとなってしまいます。(文字列or空にすれば、書き込み自体は可能です)
○実現したい内容→各ユーザーの勤務データをCSVに書き込みたい
○現状→エラーが出てしまう。
○試みた内容→CSV自体の出力はできるので、values = []内の内容をどのように記載するかを考察。
userのattendanceということで,@user.attendance.worked_on,
@user.attendance.started_at,@user.attendance.finished_atとした。
お手数おかけしますが、解決策をご教授頂けると幸いです。
宜しくお願い申し上げます。
*勤務表&CSVボタン画面*
*成功イメージ*
*エラー画面*
*attendance.rb*
rb
1def self.csv_attributes 2 ["worked_on," "started_at", "finished_at"] 3 end 4 5 def self.to_csv 6 headers = %w(日付 出社 退社) 7 csv_data = CSV.generate(headers: headers, write_headers: true, force_quotes: true) do |csv| 8 csv << csv_attributes 9 values = [ 10 @user.attendance.worked_on, 11 @user.attendance.started_at, 12 @user.attendance.finished_at 13 ] 14 all.each do |row| 15 csv << values 16 end 17 end 18 csv_data.encode(Encoding: :SJIS)
*user_controller.rb*
rb
1def show 2 @worked_sum = @attendances.where.not(started_at: nil).count 3 @attendances = Attendance.all 4 respond_to do |format| 5 format.html 6 format.csv { send_data @user.attendances.to_csv, type: 'text/csv; charset=shift_jis', filename: "#{@user.name}:#{l(@first_day, format: :middle)}分勤怠.csv" } 7 end 8 end
*user_show.html.erb*
erb
1<%= link_to "CSV出力",user_path(format: 'csv'),class: "btn btn-primary" %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/21 14:47