@yuma0222 (yuma)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Railsアプリにて、管理者としてログインしようとしたところActiveRecord::StatementInvalidというエラーが出てしまう。

解決したいこと

Ruby on Rails5の教材を参考にしながら、タスク管理アプリケーションの作成をしています。
管理者のログイン機能、投稿機能等を一通り実装後、db/seed.rbに初期管理者情報を設定し、管理者第一号としてログインを試みたところ、以下のようなエラーが発生してしまいました。
解決方法を教えていただけると幸いです。

発生している問題・エラー

スクリーンショット 2020-09-26 17.03.17.png

該当するソースコード

app/view/tasks/index.html.slim

  tbody
    - @tasks.each do |task|
      tr
        td= link_to task.name, 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'

app/controllers/tasks_controller.rb

  def index
    @tasks = current_user.tasks.order(created: :desc)
  end

db/migrate/create_tasks.rb

class CreateTasks < ActiveRecord::Migration[6.0]
  def change
    create_table :tasks do |t|
      t.string :name
      t.text :description

      t.timestamps
    end
  end
end

db/migrate/add_user_id_to_tasks.rb

class AddUserIdToTasks < ActiveRecord::Migration[6.0]
  def up
    execute 'DELETE FROM tasks;'
    add_reference :tasks, :user, null: false, index: true
  end

  def down
    remove_reference :tasks, :user, index: true
  end

end

app/models/tasks.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

自分で試したこと

migrate実行後にmigraitionファイルを、編集したのかと思い、db:migrate:resetを実行してから、再度migrateを実行しましたが、うまくいきませんでした。

参考にした記事
https://teratail.com/questions/180998

0 likes

1Answer

エラー内容が column "created" does not exist
つまり "created" というカラムが存在しません となっているようです。

Ruby on Rails は触ったことがないのですが
create_tasks.rbt.timestamps で生成されるカラムは
created_atupdated_at の2つではないかと思います。

app/controllers/tasks_controller.rb の下記の箇所がおかしいように思います。

   def index
-    @tasks = current_user.tasks.order(created: :desc)
+    @tasks = current_user.tasks.order(created_at: :desc)
   end
2Like

Comments

  1. @yuma0222

    Questioner

    上記の通り、created_atに修正したら、無事動作しました!
    原因がわからず、長時間ハマっていたので、助かりました。ありがとうございました。

Your answer might help someone💌