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

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

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

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

PostgreSQL

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

Q&A

解決済

1回答

2328閲覧

PG::UndefinedColumn: ERROR: column と出てつまづいています

kazuki0714

総合スコア28

Ruby

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

PostgreSQL

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

0グッド

0クリップ

投稿2019/03/24 03:19

編集2019/03/24 03:28

Ruby on Railsの教材を見ながらマッチング機能を実装しようとしてるのですがこのエラーが出て原因が究明できずつまづいています。

イメージ説明

教材がsqliteだったのですが私がローカル環境をpostgreSQLで設定していたので、postgreSQlで進めたのが原因かと思われます。

分かる方いらっしゃいましたらアドバイスよろしくお願いいたします。

app/controllers/matching_controller.rb

Ruby

1class MatchingController < ApplicationController 2 def index 3 got_reaction_user_ids = Reaction.where(to_user_id: current_user.id, status: 'like').pluck(:from_user_id) 4 @match_users = Reaction.where(to_user_id: got_reaction_user_ids, from_user_id: current_user.id, status: 'like').map(&:to_user) 5 end 6end 7

db/migrate/create_reactions.rb

Ruby

1class CreateReactions < ActiveRecord::Migration[5.2] 2 def change 3 create_table :reactions do |t| 4 t.integer :to_user_id, null: false 5 t.integer :from_user_id, null: false 6 t.integer :status, null: false 7 t.timestamps 8 end 9 end 10end

app/models/reaction.rb

ruby

1class Reaction < ApplicationRecord 2 belongs_to :to_user, class_name: "User" 3 belongs_to :from_user, class_name: "User" 4 enum status: { like: 0, dislike: 1 } 5 end

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

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

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

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

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

guest

回答1

0

ベストアンサー

マイグレーション実行後にマイグレーションファイルを編集していませんか?(create_reactions.rb)

db/schema.rbを確認してreactionsテーブルにfrom_user_idカラムがあるか確認してみてください。

無い場合はDB再構築を行ってください。(DBを削除し直しますのでそれまでのデータが消えますのでご注意ください。)

rails db:migrate:reset

投稿2019/03/24 03:30

編集2019/03/24 03:54
ykp_yk

総合スコア654

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

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

kazuki0714

2019/03/24 03:45 編集

ありがとうございます。 db/schema.rbを確認すると"from_user_id"が入っていませんでした。 こちらに t.integer "from_user_id", null: false を追加して rails db:migrate:reset すればよろしいのでしょうか? db/schema.rb ``` ActiveRecord::Schema.define(version: 2019_03_20_034654) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "reactions", force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false end create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "name", limit: 100, default: "", null: false t.string "self_introduction", limit: 500 t.integer "sex", default: 0, null: false t.string "img_name" t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end end ```
ykp_yk

2019/03/24 03:47

db/schema.rbはマイグレーション実行時に自動的に書き換わるものですから、これを手動で書き換えてはいけません。 db/migrate/create_reactions.rbファイルは正しく記述できていると思いますので特に何もせず再構築を行ってください。 $ rails db:migrate:reset
ykp_yk

2019/03/24 03:51

カラムができていない原因は実行済みのマイグレーションファイルに編集を行ったからだと思います。 実行済みのマイグレーションファイルは編集や削除を行ってはいけません。 実行状況は以下コマンドでわかります。 rails db:migrate:status stausがupとなっているファイルは実行済みです。このファイルは編集や削除をおこなってはいけません。 編集・削除を行う場合はstatusがdownになるようにrollbackをしてください。 rails db:rollback こちらのコマンドで一段階戻せます。3つ戻したい場合はオプションをつけてください。 rails db:rollback step=3 downになっていることを確認してから編集や削除を行ってください。
ykp_yk

2019/03/24 03:53

さらに、指定のマイグレーションファイルだけやり直すこともできます。 rails db:migrate:redo VERSION=timestamp timestamp部分はマイグレーションファイルの日付の部分になります。 これを行なうことによって、指定のファイルだけマイグレーションのやり直しを行いますので、他のマイグレーションファイルには影響が出ませんから、該当ファイルのデータだけリセットされます。
kazuki0714

2019/03/24 04:21

ありがとうございます。 試したのですが以下の流れで合っているでしょうか? 新たなエラーが発生したのですが PG::UndefinedColumn: ERROR: column のコメントはなくなりました。 $ rails db:rollback step=3 == 20190320034654 CreateReactions: reverting ================================== -- drop_table(:reactions) -> 0.0012s == 20190320034654 CreateReactions: reverted (0.0023s) ========================= 上記で create_reaction.rbを編集できるようにしてdownになっているか確認。 oouchihajimetakeshinoMacBook-Pro:techpit-match ps005064$ rails db:migrate:status database: techpit-match_development Status Migration ID Migration Name -------------------------------------------------- up 20190319065623 Devise create users up 20190319072444 Add column to user down 20190320034654 Create reactions 再度編集し直して下記のように rails db:reset $ rails db:migrate:reset Dropped database 'techpit-match_development' Dropped database 'techpit-match_test' Created database 'techpit-match_development' Created database 'techpit-match_test' == 20190319065623 DeviseCreateUsers: migrating ================================ -- create_table(:users) -> 0.0052s -- add_index(:users, :email, {:unique=>true}) -> 0.0029s -- add_index(:users, :reset_password_token, {:unique=>true}) -> 0.0037s == 20190319065623 DeviseCreateUsers: migrated (0.0120s) ======================= == 20190319072444 AddColumnToUser: migrating ================================== -- add_column(:users, :name, :string, {:null=>false, :default=>"", :limit=>100}) -> 0.0009s -- add_column(:users, :self_introduction, :string, {:limit=>500}) -> 0.0004s -- add_column(:users, :sex, :integer, {:null=>false, :default=>0}) -> 0.0010s -- add_column(:users, :img_name, :string) -> 0.0005s == 20190319072444 AddColumnToUser: migrated (0.0029s) ========================= == 20190320034654 CreateReactions: migrating ================================== -- create_table(:reactions) -> 0.0058s == 20190320034654 CreateReactions: migrated (0.0058s) ========================= 全部upになっていることを確認。 oouchihajimetakeshinoMacBook-Pro:techpit-match ps005064$ rails db:migrate:status database: techpit-match_development Status Migration ID Migration Name -------------------------------------------------- up 20190319065623 Devise create users up 20190319072444 Add column to user up 20190320034654 Create reactions
ykp_yk

2019/03/24 04:39

rails db:migrate:resetを行なうのであればロールバックは必要ありません。 rails db:migrate:resetはデータベースを削除し、再度作成、マイグレーションを最初からやり直す以下3つのコマンドを行なうことと同意です。 rails db:drop rails db:create rails db:migrate そのため、ロールバックする必要はありませんね。 db/schema.rbファイルを確認し、設計通りのテーブル群が出来上がっていれば問題ないです。
kazuki0714

2019/03/24 04:44

はい、achema.rbのreactionテーブルにfrom_user_idが追加されていました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問