WEBサービス実装中に出たエラーと解決した方法を簡単にメモしておく
DB関連のエラーでした。
今回のエラー
viewで表示している値を、足して合計を出そうとした。
<% vehicle_number_all = 0 %> <% traveling_number_all = 0 %> <% transport_time_all = 0 %> . . . <%= work.vehicle_number %> <%= work.traveling_number %> <%= work.transport_time %> . . . . <% vehicle_number_all += work.vehicle_number %> <% traveling_number_all += work.traveling_number %> <% transport_time_all += work.transport_time %> . . <%= vehicle_number_all %> <%= traveling_number_all %> <%= transport_time_all %>
こんな感じで、変数に0を代入
表示している値
0を代入した変数に、表示している値を足す
合計の変数を表示
これをRails sすると
nil can’t be coerced into Fixnum
というエラーが返ってきた。
つまり、 nilを整数にできないよ!!ってエラーらしい。
さて、どう解決するか
解決法
そもそもnilってなんだよって話を自分用にまとめておく(超基本)
「nil」は「多重代入」でも出てきましたがオブジェクトが存在していないことを表すために使用されます。例えば何もオブジェクトが代入されていない変数には「nil」が代入されているとして扱われます。
まあこのnilさんをどうするかって話なのだけど、僕はデフォルト値を0にすることにした
(多分もっといいやり方ある)
rake db:rollback STEP=1
このコマンドを使って、最後にmigrateしたのを元の状態に戻す。
一つ前の状態に戻してくれるだけなので、とっても便利なこのコマンド。
で、
class CreateWorks < ActiveRecord::Migration def change create_table :works do |t| t.integer :vehicle_number t.integer :traveling_number t.integer :transport_time t.references :user, index: true, foreign_key: true t.timestamps null: false end end end
これを
class CreateWorks < ActiveRecord::Migration def change create_table :works do |t| t.integer :vehicle_number, :default => 0 t.integer :traveling_number, :default => 0 t.integer :transport_time, :default => 0 t.references :user, index: true, foreign_key: true t.timestamps null: false end end end
こうしました。
デフォルトを0に設定するだけっていうね。
とりあえずこれで動いた。
あとはバリデーションをちょこちょこいじる。
最後に
これで動いたには動いたけど、しっくりこないな。
またRubyOnRailsできる人に質問いこう。
DB系ももっと勉強したい感ある。
コメントを残す