我正在尝试保存一个具有名称和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>****
尝试设置关联的:inverse_of
选项。
has_many :events, foreign_key: :creator_id, inverse_of: : creator
...
belongs_to :creator, class_name: "User", inverse_of: :events
问题出在一个迁移文件中。。我在事件表迁移中使用了引用“创建者”,这是导致问题的原因。回滚数据库并将事件表迁移更改为此=>
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