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

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

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

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

Ruby on Rails

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

解決済

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

herisson0818
herisson0818

総合スコア0

Ruby

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

Ruby on Rails

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

2回答

0評価

0クリップ

35閲覧

投稿2020/06/14 06:46

編集2022/01/12 10:58

お世話になります。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
【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
【user.rb】 class User < ApplicationRecord has_secure_password validates :name, presence: true validates :email, presence: true, uniqueness: true has_many :tasks end

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

winterboum
winterboum

2020/06/14 14:12

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

2020/06/15 11:27

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

2020/06/15 14:15

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

2020/06/16 11:05

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

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby

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

Ruby on Rails

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