質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

5065閲覧

undefined method `strftime' for nil:NilClassが解決できません

RThe

総合スコア25

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2020/09/24 13:40

現在、タイムカードのcsvエクスポートを作成しております。
エクスポート自体は出来たので、worked_on(日付)、started_at(出勤),finished_at(退勤)の表記を
変更しようと、strftime(ブラウザに表示するフォーマット)を加えたところ、下記のようなエラーが出ました。
イメージ説明

試しに、strftimeをworked_on(日付)のみにしたところエクスポートは成功しますので、
日付は必ず存在するが、出勤&退勤は存在しない日(nil)もあるので、strftimeで変換出来ないのではと考えました。

*↓これなら、エクスポートは出来ますが、時刻の表記が「2020-09-24 11:45:00 +0900」の様になる*

ruby

1CSV.generate(encoding: Encoding::SJIS, write_headers: true, force_quotes: true) do |csv| 2 csv_headers = ["日付", "出社", "退社","備考"] 3 csv << csv_headers 4 @attendances.each do |day| 5 values = [ 6 day.worked_on.strftime('%m/%d'), 7 day.started_at, 8 day.finished_at, 9 day.note 10 ] 11 csv << values 12 end 13 end

方法としては、ifを使い、
「day.started_atが存在すれば.strftime('%h:%m')の表記で出力。nilなら空白を出力(day.started_at day.finished_atの両パターンを作成)」を記載すれば良いかなと考えましたが、
どのようなコードを記載すれば良いかがわかりません。

お手数おかけしますが、教えていただけると幸いです。

○実現したい事→エラーを解決し、時間をフォーマット表示でCSVエクスポートを出力したい
○現状→undefined method `strftime' for nil:NilClassのエラーが出る
○試した事→日付のみなら出るので、条件分岐にて表記すれば良いのではと考えるがコードがわからず

宜しくお願い申し上げます

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

nilだったらnilを、そうでなければメソッドを呼び出す場合はRubyにある &.を使うと簡単です。参考:Rubyの&.とRailsの#tryの違いについて

今回の例でいうと、以下のようにするといいかもしれません。

day&.started_at&.strftime('%m/%d')

投稿2020/09/24 15:17

hatsu

総合スコア1809

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RThe

2020/09/25 05:42

ご回答いただき、ありがとうございます。 ご提示いただいた、内容で、無事に解決することができました。 参考サイトも拝見させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問