Railsでモデルにデータをsaveする際にUndefinedColumn
が出てしまいます。
DBの中身を見てもテーブルにカラムは存在しますし、Postgresの制約である大文字小文字の制約もクリアできてると思います。
何故UndefinedColumn
になってしまうのかわかりません。
何かアドバイスあればご教示いただけますと幸いです。
> \d process_result; Table "public.process_result" Column | Type | Modifiers --------------------+-----------------------------+----------- process_id | character varying(20) | not null process_user_id | character varying(20) | not null process_job_id | character varying(20) | not null process_job_name | character varying(100) | not null process_start_time | timestamp without time zone | process_end_time | timestamp without time zone | process_result | character(3) | file_name | character varying(256) | Indexes: "process_result_pkey" PRIMARY KEY, btree (process_id, process_user_id)
model
1# coding: utf-8 2class ProcessResult < ActiveRecord::Base 3 self.table_name = 'process_result' 4 self.primary_key = :process_id, :process_user_id 5 attr_accessor :search_data,:start_time,:end_time 6end 7
Controller
1~~~~~略 2processResult = ProcessResult.new 3processResult.process_id='202' 4processResult.process_user_id='batch' 5processResult.process_job_id='MD-06-003' 6processResult.process_job_name='データ一括出力' 7processResult.process_start_time=today 8processResult.process_result='001' 9processResult.file_name=file_name+'.zip' 10processResult.save! 11~~~~~略
log
1ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: 列"[:process_id, :process_user_id]"は存在しません 2LINE 1: ...e") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "[:process... 3 ^ 4: INSERT INTO "process_result" ("process_id", "process_user_id", "process_job_id", "process_job_name", "process_start_time", "process_result", "file_name") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "[:process_id, :process_user_id]"):
追記
問題としては、複合主キーを利用していることが悪いようでした。
以下モデルの、self.primary_keyで複合主キーを定義していましたが、モデルが古いRails(3.0.1)で書かれたコードであるため、最新の構文?にあってなかったように思えます。
composite_primary_keysというGemを導入して、primary_keysという書き方をすれば一応動きました。
model
1# coding: utf-8 2class ProcessResult < ActiveRecord::Base 3 self.table_name = 'process_result' 4 self.primary_key = :process_id, :process_user_id 5 attr_accessor :search_data,:start_time,:end_time 6end 7
少し質問の趣旨とは外れるのですが、
RailsってDBのスキーマ側でプライマリーキーを定義していれば、どのフィールドがPKかはRailsが勝手に判断してくれたりするんでしょうか?
つまり、モデルファイル上でself.primary_keyのように明示的に指定する必要が無ければ削除してしまうかと思うのですが、どうでしょうかね?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/09 03:44