実現したいこと
railsでデータをupdateしたい
発生している問題・分からないこと
日記のアプリを作成しているが日記に書いた内容を編集するとエラーが発生する
Diary.new diary_paramsではエラーなくデータを作成できたのにupdateすると
diary_paramsで指定していないどこからきたかわからないdiariesというカラムがないというエラーが出てくる
ruby
1def update 2 @diary = Diary.where( user_id: session[:user_id] , date: Date.today).first 3 4 if @diary.update(diary_params) 5 redirect_to '/diaries/index', status: :unprocessable_entity 6 else 7 render 'edit', status: :unprocessable_entity 8 end 9 end 10 11 private 12 def diary_params 13 params.require(:diary).permit(:user_id, :title, :content, :date) 14 end
エラーメッセージ
error
1ActiveRecord::StatementInvalid in DiariesController#update 2SQLite3::SQLException: no such column: diaries.
該当のソースコード
rails
1特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Chatgptで聞いたが解消できずネットには同じエラーを探せなかった
補足
特になし
> エラーメッセージ
これはwhereとupdateのどちらで発生していますか?
updateです!whereではデータ取れています。
まじで助けてほしいです・・
・モデルにはどんなコードを書いていますでしょうか?
・エラーのスタックトレース(エラー箇所をどこから呼び出したかのリスト)は取れますか?
モデルの内容です
class Diary < ApplicationRecord
belongs_to :user, foreign_key: 'user_id'
validates :title, presence: { message: 'タイトルは必須です。'}
validates :content, presence: { message: '日記の内容を入力してください'}
end
エラーのスタックトレースとは
ActiveRecord::StatementInvalid in DiariesController#update
SQLite3::SQLException: no such column: diaries.
のことですか?
一応エラーが起きているのは
if @diary.update(diary_params)の部分でelseのコードすら読み取れてないです
UPDATE "diaries" SET "content" = ?, "updated_at" = ? WHERE "diaries"."" IS NULL [["content", "aaa"], ["updated_at", "2024-11-05 06:07:46.657064"]]
このようなエラーが生成されています
> エラーのスタックトレースとは
エラーの出た画面に、「どのファイルの何行目」のような情報が羅列になっていませんか?(それのことです)
あと、ApplicationRecordに特殊な仕掛けをしていたりはないでしょうか。
ApplicatioRecordには何も記述していないです
コンソールに表示されていたのは以下のものです。
ちなみにアップデートの時に何も変更なしに送信すると何も起きません
TRANSACTION (0.0ms) begin transaction
↳ app/controllers/diaries_controller.rb:37:in `update'
Diary Update (1.5ms) UPDATE "diaries" SET "content" = ?, "updated_at" = ? WHERE "diaries"."" IS NULL [["content", "aaa"], ["updated_at", "2024-11-05 06:07:46.657064"]]
↳ app/controllers/diaries_controller.rb:37:in `update'
TRANSACTION (0.1ms) rollback transaction
↳ app/controllers/diaries_controller.rb:37:in `update'
Completed 500 Internal Server Error in 7ms (ActiveRecord: 1.7ms | Allocations: 4435)
ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: diaries.):
ログファイル、あるいは画面側から情報は得られませんか?
railsのアプリケーションのログファイルはこのようになっていましたが
これじゃなかったらわからないです...
Started GET "/diaries/edit" for ::1 at 2024-11-05 15:07:43 +0900
Processing by DiariesController#edit as HTML
[1m[36mDiary Load (0.1ms)[0m [1m[34mSELECT "diaries".* FROM "diaries" WHERE "diaries"."user_id" = ? AND "diaries"."date" = ? LIMIT ?[0m [["user_id", "itsn2"], ["date", "2024-11-05"], ["LIMIT", 1]]
↳ app/controllers/diaries_controller.rb:28:in `edit'
Rendering layout layouts/diary.html.erb
Rendering diaries/edit.html.erb within layouts/diary
Rendered diaries/edit.html.erb within layouts/diary (Duration: 0.8ms | Allocations: 446)
Rendered layout layouts/diary.html.erb (Duration: 3.1ms | Allocations: 1581)
Completed 200 OK in 6ms (Views: 3.7ms | ActiveRecord: 0.1ms | Allocations: 2743)
Started PATCH "/diaries/edit" for ::1 at 2024-11-05 15:07:46 +0900
Processing by DiariesController#update as TURBO_STREAM
Parameters: {"authenticity_token"=>"[FILTERED]", "diary"=>{"user_id"=>"itsn2", "date"=>"2024-11-05", "title"=>"a", "content"=>"aaa"}, "commit"=>"記録する"}
[1m[36mDiary Load (0.1ms)[0m [1m[34mSELECT "diaries".* FROM "diaries" WHERE "diaries"."user_id" = ? AND "diaries"."date" = ? LIMIT ?[0m [["user_id", "itsn2"], ["date", "2024-11-05"], ["LIMIT", 1]]
↳ app/controllers/diaries_controller.rb:32:in `update'
[1m[36mTRANSACTION (0.0ms)[0m [1m[36mbegin transaction[0m
↳ app/controllers/diaries_controller.rb:37:in `update'
[1m[36mDiary Update (1.5ms)[0m [1m[33mUPDATE "diaries" SET "content" = ?, "updated_at" = ? WHERE "diaries"."" IS NULL[0m [["content", "aaa"], ["updated_at", "2024-11-05 06:07:46.657064"]]
↳ app/controllers/diaries_controller.rb:37:in `update'
[1m[36mTRANSACTION (0.1ms)[0m [1m[31mrollback transaction[0m
↳ app/controllers/diaries_controller.rb:37:in `update'
Completed 500 Internal Server Error in 7ms (ActiveRecord: 1.7ms | Allocations: 4435)
ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: diaries.):
> ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: diaries.):
この行以降にスタックトレースがありませんか?
返信遅れて申し訳ありません
ActiveRecord::StatementInvalid in DiariesController#update
SQLite3::SQLException: no such column: diaries.
Rails.root: /Users/itoshinn/Desktop/personalApps/Diary-Notebook-
Application Trace | Framework Trace | Full Trace
Request
Parameters:
{"_method"=>"patch", "authenticity_token"=>"[FILTERED]", "diary"=>{"user_id"=>"itsn", "date"=>"2024-11-07", "title"=>"こんにちは", "content"=>"ハロー!"}, "commit"=>"記録する"}
これ以降はありません
あなたの回答
tips
プレビュー