У меня есть проект Rails с базой данных postgresql.Rails/postgresQL ActiveRecord - КАК И ПОЧЕМУ изменить первичный ключ?
Скажем, у меня есть три модели - студент, преподаватель и расписание - что присоединяется к ученику и учителю
Студент модели - Вместо того, чтобы идти с student_id как мой первичный ключ, я хочу, чтобы изменить это на even_cooler_unique_student_number что школа для ученика.
Модель учителя - типичный & традиционный.
Модель расписания. Я хочу связать расписание (подумайте - только математический класс) с одним учителем и его учениками. Как это сделать на уровне базы данных и с ассоциациями AR?
Что изменит первичный_файл на базу данных? К моим ассоциациям через ActiveRecord?
class CreateStudent < ActiveRecord::Migration
def change
create_table :students do |t|
t.integer :unique_cooler_student_id, null: false
t.string :first_name
t.string :last_name
t.timestamps null: false
end
end
end
class CreateTeacher < ActiveRecord::Migration
def change
create_table :teachers do |t|
t.string :first_name
t.string :last_name
t.string :department
t.timestamps null: false
end
end
end
class CreateSchedules < ActiveRecord::Migration
def change
create_table :schedules, id: false, force: true do |t|
t.belongs_to :students, :primary_key => 'unique_cooler_student_id'
t.belongs_to :teachers
t.string :something_else
t.timestamps null: false
end
end
end
class Student
self.primary_key = 'unique_cooler_student_id'
has_many :teachers, through: :classes
end
class Teacher
has_many :students, through: :classes
end
class Schedule
belongs_to :students
belongs_to :teachers
end
Почему бы вам не просто сохранить первичный ключ и добавить 'even_cooler_unique_student_number' в качестве столбца в таблице учеников? Я уверен, что вы рассмотрели эту смехотворно простую альтернативу, поэтому должна быть какая-то причина, по которой вы решили против нее. Объяснение поможет нам понять, чего вы пытаетесь достичь, и указать путь к подходящему техническому решению. – MarsAtomic
Вы читали путеводитель по маршрутам по переселениям? Это лучше всего подходит для ответа на этот материал: http://edgeguides.rubyonrails.org/active_record_migrations.html Примечание. Я согласен, вам, вероятно, не следует изменять первичный ключ - просто добавьте новый столбец. Вы можете установить ограничения на столбец, если вам нужно. –