SQLite3 :: SQLException: нет такой таблицы: main.creators: (модель событий и пользователей с простым имеет много, принадлежит ассоциациям) - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь сохранить событие с именем и creator_id: 1 (который существует), но получаю эту ошибку, и я не могу найти никаких ссылок в Интернете, может кто-нибудь увидеть, что не так с моей моделью? У пользователей есть события, а события принадлежат пользователю как создателю.

class User < ApplicationRecord
  has_many :activities, through: :Registrations ,source: Event
  has_many :events,foreign_key: :creator_id
end
    class Event < ApplicationRecord
      has_many :attendees,through: :Registrations ,source: User
      belongs_to :creator, class_name: "User"
    end
ActiveRecord::Schema.define(version: 2020_04_15_153227) do

  create_table "events", force: :cascade do |t|
    t.integer "creator_id"
    t.string "name"
    t.string "date"
    t.string "description"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["creator_id"], name: "index_events_on_creator_id"
  end

  create_table "registrations", force: :cascade do |t|
    t.integer "user_id"
    t.integer "event_id"
    t.string "note"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["event_id"], name: "index_registrations_on_event_id"
    t.index ["user_id"], name: "index_registrations_on_user_id"
  end

  create_table "users", force: :cascade do |t|
    t.string "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end
irb(main):008:0> e
    => #<Event id: nil, creator_id: 1, name: "johns wedding", date: nil, description: nil, created_at: nil, updated_at: nil>
**irb(main):010:0> e.save**
  **(0.2ms)  begin transaction
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
  Event Create (1.8ms)  INSERT INTO "events" ("creator_id", "name", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["creator_id", 1], ["name", "johns wedding"], ["created_at", "2020-04-16 01:37:00.514717"], ["updated_at", "2020-04-16 01:37:00.514717"]]
   **(0.1ms)  rollback transaction**
Traceback (most recent call last):
        1: from (irb):10

> **ActiveRecord::StatementInvalid (SQLite3::SQLException: no such table: main.creators: INSERT INTO "events" ("creator_id", "name",
> "created_at", "updated_at") VALUES (?, ?, ?, ?)) irb(main):011:0>****

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Проблема была в одном из файлов миграции. Я использовал ссылки «создатель» в миграции таблицы событий, и это вызывало проблему. откатить базу данных и изменить миграцию таблицы событий на эту =>

create_table "events", force: :cascade do |t|
  t.integer "creator_id"
  t.string "name"
  t.string "date"
  t.string "description"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end
0 голосов
/ 16 апреля 2020

попробуйте установить параметр :inverse_of для ассоциации.

has_many :events, foreign_key: :creator_id, inverse_of: : creator
...
belongs_to :creator, class_name: "User", inverse_of: :events
...