【发布时间】:2020-10-28 02:24:08
【问题描述】:
这是在驱使我 BANANAS。我已经尝试了多种迁移方式,但这种关系似乎只有一种方式。我想要一个可以Event.first.subjects << Subject.first和Event.last.subjects << Subject.first的关系
class Event < ApplicationRecord
has_and_belongs_to_many :subjects
end
class Subject < ApplicationRecord
has_and_belongs_to_many :events
end
我创建了一个迁移
rails g migration CreateJoinTableEventSubject events subjects
class CreateJoinTableEventSubject < ActiveRecord::Migration[5.2]
def change
create_join_table :events, :subjects do |t|
t.index [:event_id, :subject_id]
t.index [:subject_id, :event_id]
end
end
end
我可以Subject.first.events 我不需要但Event.first.subjects 返回
ActiveRecord::StatementInvalid (SQLite3::SQLException: no such column: subjects.event_id: SELECT "subjects".* FROM "subjects" WHERE "subjects"."event_id" = ? LIMIT ?)
这里是schema.rb:
ActiveRecord::Schema.define(version: 2020_07_07_183602) do
create_table "events", force: :cascade do |t|
t.string "title"
t.text "description"
t.date "date"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "events_subjects", id: false, force: :cascade do |t|
t.integer "event_id", null: false
t.integer "subject_id", null: false
t.index ["event_id", "subject_id"], name: "index_events_subjects_on_event_id_and_subject_id"
t.index ["subject_id", "event_id"], name: "index_events_subjects_on_subject_id_and_event_id"
end
create_table "subjects", force: :cascade do |t|
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
【问题讨论】:
-
你运行迁移了吗?尝试重新启动服务器..
-
粘贴到这里或查看 schema.rb
-
是的,跑了
rails db:migrate。这是在控制台中,但我尝试了一个新的控制台并重新启动了服务器。 -
从您共享的所有内容中,它应该可以工作,如您所知。我怀疑您忘记删除
Subject模型中的belongs_to :event行,或者您共享的信息中未反映的其他错字。
标签: ruby-on-rails ruby-on-rails-5 database-migration