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
希望这能回答您的问题。
我有两个模型与 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
希望这能回答您的问题。