rails_admin 使用过时的 table 名称

rails_admin using outdated table names

我有两个模型与 has_and_belongs_to_many 协会相关联:课程和学期。 rails_admin 只让我可以选择在创建课程时添加学期,而不是相反(实际上,在创建学期时添加课程更有用)。我对迁移做了一些调整:

  def change
    create_table "courses", force: :cascade do |t|
      t.string   "department"
      t.integer  "number"
      t.datetime "created_at",  null: false
      t.datetime "updated_at",  null: false
    end

    create_table "semesters", force: :cascade do |t|
      t.integer  "year"
      t.string   "season"
      t.datetime "created_at", null: false
      t.datetime "updated_at", null: false
    end

    create_table "semesters_courses", id: false, force: :cascade do |t|
      t.integer "semester_id"
      t.integer "course_id"
    end

    add_index "semesters_courses", ["course_id"], name: "index_semesters_courses_on_course_id"
    add_index "semesters_courses", ["semester_id"], name: "index_semesters_courses_on_semester_id"
  end

为了清楚起见,我将中介 table 从 courses_semesters 重命名为 semesters_courses。这不仅没有解决问题,而且现在当我尝试添加新课程时,它 500s 并告诉我:

Could not find table 'courses_semesters'

我知道我可以通过改回名称来解决这个问题,但我不确定 railsadmin 从哪里得到这个名称(并怀疑这是我的问题的根源)。我删除并重新安装了 railsadmin,删除并重写了 tables,并清除了浏览器的缓存。当我在整个项目树中搜索 "courses_semesters," 时,我只在错误日志中得到结果。

Rails dev 的新功能,所以我假设我在某处丢失了一些我需要更新的配置文件,但希望得到一些关于在哪里可以找到它的帮助。

您正在覆盖连接 table 名称。

选项 1 您必须在模型中指定连接的名称 table

app/models/course.rb

has_and_belongs_to_many :semesters, join_table: "semesters_courses"

app/models/semester.rb

has_and_belongs_to_many :courses, join_table: "semesters_courses"

选项 2 只需使用迁移将您的联接 table 重命名为 "courses_semesters"。

rails g migration rename_courses_semesters

class RenameCoursesSemesters < ActiveRecord::Migration
  def self.up
    rename_table :semesters_courses, :courses_semesters
  end

  def self.down
    rename_table :courses_semesters, :semesters_courses
  end
end

希望这能回答您的问题。