現場Rails 7章 CSV出力機能実装時のSyntaxErrorの解決方法
現場で使える Ruby on Rails 5速習実践ガイドを進めている最中に遭遇した、SyntaxErrorの解決方法についてメモします。
起きた事
Chapter 7-6における「CSVファイルのインポート/エクスポート」の項でお手本の通り写経すると、SyntaxErrorを吐く状態となりました。タスクモデル(task.rb)にto_csvというクラスメソッドを追加し、コントローラーを実装し、ビューファイルであるindex.html.slimの末尾にエクスポートボタンのリンクを設置して動作確認を行うと失敗してしまいます。
やった事
SyntaxErrorとは基本的文法ミスなので、(これまでの経験からも)ほぼ間違いなく自分のタイプミスと考えました。記述したファイルを確認し間違いがないか見ますが、書籍との差異は発見できません。続いてエラーのログを確認して、間違っている箇所を特定する事にします。
ログでは「最後の行にミスがある」と出ていましたが末尾は単なるENDで、途中のロジックが間違っていると判断し調べますが、エラー箇所が特定できませんでした。
解決方法
書籍に乗っているコードが(恐らく)間違っていて、endの個数を末尾に一つ増やすと正常に動作しました。
def self.csv_attributes ["name", "description", "created_at", "updated_at"] end def self.generate_csv CSV.generate(headers: true) do |csv| csv << csv_attributes all.each do |task| csv << csv_attributes.map{|attr| task.send(attr) } end end end private def validate_name_not_including_comma errors.add(:name, 'にカンマを含めることはできません') if name&.include?(',') end end
とすると恐らく正常に動作すると思われます。
まとめ
単純な間違いですが、ロジックにミスがあるという固定観念があると気づきにくいのだなと感じました。エラーはまず簡単な事から疑ってみるのが早そうですね。