UserモデルとTaskモデルの一対多の関係を利用して、投稿機能を作成しています。
投稿を作成しようと、rails c で以下の内容を保存するために、task.saveを実行するとfalseが返ってきました。
migrationファイルでミスしているのかもと思い見直してみたんですが、それらしきものは見つかりませんでした。
どういった原因で保存ができないのか、どなたかご返答いただけると助かります。
よろしくお願いいたします。
補足情報としてmigrationファイルも添付しておきます。
2.5.3 :010 > task = user.tasks.build(content: 'hello') => #<Task id: nil, content: "hello", created_at: nil, updated_at: nil, status: nil, user_id: 1>
2.5.3 :012 > task.save (0.5ms) BEGIN (0.1ms) ROLLBACK => false
・migrationファイル
class CreateTasks < ActiveRecord::Migration[5.2] def change create_table :tasks do |t| t.string :content t.timestamps end end end
class AddStatusToTasks < ActiveRecord::Migration[5.2] def change add_column :tasks, :status, :string end end
class AddUserRefToTasks < ActiveRecord::Migration[5.2] def change add_reference :tasks, :user, foreign_key: true end end
class CreateUsers < ActiveRecord::Migration[5.2] def change create_table :users do |t| t.string :name t.string :email t.string :password_digest t.timestamps end end end
save を save! に変えて実行すると例外が出力されると思いますよ。
それを読めばあらかた原因もわかると思います。
ご指摘ありがとうございます。
save! を実行してみると、ActiveRecord::RecordInvalid (Validation failed: Status can't be blank)
と、返ってきました。
statusカラムが空なのが原因ぽい様子なので、statusカラムも追加してtask.saveを実行してみたら無事trueされました!
絶妙なヒントをいただけてとても助かりました!
今後もこういった状況の時にsave! を活用してみます。
ありがとうございました。
回答2件
あなたの回答
tips
プレビュー