我有两个与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的新功能,所以我假设我在某个地方缺少一些我需要更新的配置文件,但是希望在哪里可以找到它。
答案 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
希望这能回答你的问题。