質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

1回答

689閲覧

RailsのPG::UndefinedColumnエラーについて

yuuki0218

総合スコア22

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2020/01/09 02:22

編集2020/01/09 03:57

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のように明示的に指定する必要が無ければ削除してしまうかと思うのですが、どうでしょうかね?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

PG::UndefinedColumn が出たdatabaseと
Table "public.process_result" 表示させたdatabaseは同じですか?
railsの実行環境のdatabaseと同じものを見ていることを確認してください。

migrationしたあとサーバーの再起動をしましたか?
developmentですと再起動無しでも大抵通りますが駄目なときもあります。
productionの場合は必須です

投稿2020/01/09 02:56

winterboum

総合スコア23340

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuuki0218

2020/01/09 03:44

> PG::UndefinedColumn が出たdatabaseと > Table "public.process_result" 表示させたdatabaseは同じですか? こちらは同一のテーブルを参照しています。 少し調査進捗があったのですが、どうやら複合主キーを定義している部分が悪いみたいです。 というのも、Webで調べてみると、複合主キーを定義する場合には、composite_primary_keysというGemを導入する必要?があるようで、その影響でエラーが出ているかもしれません。 ただ、現行の環境はRails5.2.0なのですが、上記のGemを導入していない古い環境(Rails3.0.1)では同じリソースで同様のエラーは出ていなかったので、私の作業都合で言うと、「何故古い環境では動いていなかったのか?」が気なるところです。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問