SQLite3 :: SQLException:没有这样的表:main.creators:(简单的事件和用户模型有很多,属于关联)

问题描述 投票:0回答:2

我正在尝试保存一个具有名称和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>****
ruby-on-rails activerecord model associations sqlite3-ruby
2个回答
0
投票

尝试设置关联的:inverse_of选项。

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

0
投票

问题出在一个迁移文件中。。我在事件表迁移中使用了引用“创建者”,这是导致问题的原因。回滚数据库并将事件表迁移更改为此=>

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
© www.soinside.com 2019 - 2024. All rights reserved.