rails_admin使用过时的表名

时间:2016-04-16 04:24:13

标签: ruby-on-rails rails-admin

我有两个与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

为了清楚起见,我将这些中间表重新命名为courses_semesters中的semesters_courses。这不仅没有解决问题,而且现在当我尝试添加一个新课程时,它已经500了并告诉我:

  

无法找到表格' courses_semesters'

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

Rails dev的新功能,所以我假设我在某个地方缺少一些我需要更新的配置文件,但是希望在哪里可以找到它。

1 个答案:

答案 0 :(得分:0)

您正在覆盖连接表名称。

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

应用/模型/ course.rb

has_and_belongs_to_many :semesters, join_table: "semesters_courses"

应用/模型/ semester.rb

has_and_belongs_to_many :courses, join_table: "semesters_courses"

选项2 只需将您的联接表重命名为" 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

希望这能回答你的问题。