Как мне script/generate migration
создать объединенную таблицу для has_and_belongs_to_many
отношений?
Приложение работает на Rails 2.3.2, но у меня также установлен Rails 3.0.3.
Как мне script/generate migration
создать объединенную таблицу для has_and_belongs_to_many
отношений?
Приложение работает на Rails 2.3.2, но у меня также установлен Rails 3.0.3.
Куда:
class Teacher < ActiveRecord::Base
has_and_belongs_to_many :students
end
и
class Student < ActiveRecord::Base
has_and_belongs_to_many :teachers
end
для рельсов 4:
rails generate migration CreateJoinTableStudentTeacher student teacher
для рельсов 3:
rails generate migration students_teachers student_id:integer teacher_id:integer
для рельсов <3
script/generate migration students_teachers student_id:integer teacher_id:integer
(обратите внимание, что в названии таблицы указаны обе соединяемые таблицы в алфавитном порядке)
а затем только для рельсов 3 и ниже, вам нужно отредактировать созданную миграцию, чтобы поле id не создавалось:
create_table :students_teachers, :id => false do |t|
rails generate migration CreateJoinTableTeacherStudent teacher student
вместо этого я пытаюсьrails generate migration CreateJoinTableStudentTeacher student teacher
, это то же самое? Нужно ли S (ученику) делать это перед T (учеником)?has_and_belongs_to_many
Таблица должна соответствовать этому формату. Я предполагаю, что две соединяемые моделиhas_and_belongs_to_many
уже находятся в БД:apples
иoranges
:Если вы используете в
:unique => true
индексе, тогда вы должны (в rails3) перейти:uniq => true
кhas_and_belongs_to_many
.Дополнительная информация: Rails Docs
ОБНОВЛЕНО 13 декабря 2010 г. Я обновил его, чтобы удалить идентификатор и временные метки ... В основном
MattDiPasquale
иnunopolonia
они верны: не должно быть идентификатора и не должно быть временных меток, иначе рельсы не позволятhas_and_belongs_to_many
работать.источник
script/generate migration
...Вы должны назвать таблицу именами двух моделей, которые вы хотите подключить, в алфавитном порядке и поместить два идентификатора модели в таблицу. Затем соедините каждую модель друг с другом, создав ассоциации в модели.
Вот пример:
Но это не очень гибко, и вам следует подумать об использовании has_many: through
источник
Верхний ответ показывает составной индекс, который, я не думаю, будет использоваться для поиска яблок в апельсинах.
Я нашел ответ, основанный на «Докторе Что», полезным, и обсуждение, безусловно, тоже.
источник
В рельсах 4 вы можете просто использовать
create_join_table: table1s,: table2s
это все.
Внимание: вы должны записывать table1, table2 буквенно-цифровыми значениями.
источник
Мне нравится делать:
rails g migration CreateJoinedTable model1:references model2:references
, Таким образом я получаю миграцию, которая выглядит так:Мне нравится индексировать эти столбцы, потому что я часто выполняю поиск, используя эти столбцы.
источник
add_foreign_key
завершится ошибкой, если поместить ее в ту же миграцию, что и та, которая создавала таблицы.