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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

1537閲覧

タスク管理アプリでエラー「PG::UndefinedColumn: ERROR: column tasks.user_id does not exist」

herisson0818

総合スコア3

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/14 06:46

編集2020/06/15 12:01

お世話になります。Ruby初心者です。
現在、Rubyでタスク管理アプリを製作しているものです。
完成を間近にしてエラーにハマってしまっています。
よろしければお力添えお願いいたします。
エラー内容は以下の通りです。
イメージ説明

【エラーメッセージ】 Showing /Users/Username/task-manager/app/views/tasks/index.html.slim where line #11 raised: PG::UndefinedColumn: ERROR: column tasks.user_id does not exist LINE 1: SELECT "tasks".* FROM "tasks" WHERE "tasks"."user_id" = $1 O...

発生箇所とされている箇所のコードは以下の通りです。こちらの11行目が指定されているエラー箇所です。
エラー箇所:- @tasks.each do |task|

【index.html.slim】 h1 タスク一覧 = link_to '新規登録', new_task_path, class: 'btn btn-primary' .mb-3 table.table.table-hover thead.thead-default tr th= Task.human_attribute_name(:name) th= Task.human_attribute_name(:created_at) tbody - @tasks.each do |task| tr td= link_to task.name, task_path(task) td= task.created_at td = link_to '編集', edit_task_path(task), class: 'btn btn-primary mr-3 ' = link_to '削除', task, method: :delete, data: { confirm: "タスク「#{task.name}」を削除します。よろしいですか?"}, class: 'btn btn-danger'

関連として、コントローラーとモデルのコードも貼っておきます。

【tasks_controller.rb】 class TasksController < ApplicationController before_action :set_task, only: [:show, :edit, :update, :destroy] def index @tasks = current_user.tasks.order(created_at: :desc) end
【task.rb】 class Task < ApplicationRecord validates :name, presence: true validates :name, length: { maximum: 30} validate :validate_name_not_including_comma belongs_to :user scope :recent, -> { order(created_at: :desc)} private def validate_name_not_including_comma errors.add(:name, 'にカンマを含めることはできません') if name&.include?(',') end end
【user.rb】 class User < ApplicationRecord has_secure_password validates :name, presence: true validates :email, presence: true, uniqueness: true has_many :tasks end
【scheme.rb】  create_table "tasks", force: :cascade do |t| t.string "name", limit: 30, null: false t.text "description" t.datetime "created_at", precision: 6, null: false t.datetime "updated_at", precision: 6, null: false end

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

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

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

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

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

winterboum

2020/06/14 14:12

model Taskのschema確認させてください
herisson0818

2020/06/15 11:27

ご回答ありがとうございます。 理解が浅くて申し訳ないのですが 今読み進めているテキスト(Ruby on Rails5速習実践ガイド」では、user_idのカラムを設けていません。 Userに「has_many :tasks」することで関連付けされているんです。 なんとか上記の方法でうまくいかないものでしょうかい。 userのモデルを追記しておきます。ご協力いただければ幸いです。
winterboum

2020/06/15 14:15

それはおかしいですね。 Taskの方も has_many :users になってるとかではない?
herisson0818

2020/06/16 11:05

エンジニアの友達の助言で、「rails generate migration AddUserRefToTasks user:references」 したらうまく行きました。 元々「rails generate migration AddUserIdToTasks」していたんですが、、、 postgresを確認したら、その時点ではtasksにuser_id カラムが追加されていなかったことが判明しました。原因は分かりませんが、なんとか解決できました。 winterboum様、親身に考えていただき本当にありがとうございました。
guest

回答2

0

「rails generate migration AddUserRefToTasks user:references」
したらうまく行きました。
データベースにtasksにuser_idが追加されていないことが原因でした。

投稿2020/06/16 11:07

herisson0818

総合スコア3

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

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

0

ベストアンサー

Taskは belongs_to :user なので、column user_id が必要ですが、それが無いようです。add_columnしてください

投稿2020/06/14 22:42

winterboum

総合スコア23284

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問