お世話になります。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
model Taskのschema確認させてください
ご回答ありがとうございます。
理解が浅くて申し訳ないのですが
今読み進めているテキスト(Ruby on Rails5速習実践ガイド」では、user_idのカラムを設けていません。
Userに「has_many :tasks」することで関連付けされているんです。
なんとか上記の方法でうまくいかないものでしょうかい。
userのモデルを追記しておきます。ご協力いただければ幸いです。
それはおかしいですね。
Taskの方も has_many :users になってるとかではない?
エンジニアの友達の助言で、「rails generate migration AddUserRefToTasks user:references」
したらうまく行きました。
元々「rails generate migration AddUserIdToTasks」していたんですが、、、
postgresを確認したら、その時点ではtasksにuser_id カラムが追加されていなかったことが判明しました。原因は分かりませんが、なんとか解決できました。
winterboum様、親身に考えていただき本当にありがとうございました。
回答2件
あなたの回答
tips
プレビュー