Comment faire un pour créer une table de jointure pour un
relation ?
L’application s’exécute sur Rails 2.3.2, mais j’ai aussi des Rails 3.0.3 installé.
Comment faire un pour créer une table de jointure pour un
relation ?
L’application s’exécute sur Rails 2.3.2, mais j’ai aussi des Rails 3.0.3 installé.
Où:
class Teacher < ActiveRecord::Base
has_and_belongs_to_many :students
end
et
class Student < ActiveRecord::Base
has_and_belongs_to_many :teachers
end
pour les rails 4:
rails generate migration CreateJoinTableStudentTeacher student teacher
pour rails 3:
rails generate migration students_teachers student_id:integer teacher_id:integer
pour les rails < 3
script/generate migration students_teachers student_id:integer teacher_id:integer
(notez le nom de la table répertorie à la fois les tables de jointure dans l'ordre alphabétique)
et puis pour rails 3 et ci-dessous, vous devez modifier votre générés migration donc un champ id n'est pas créée:
create_table :students_teachers, :id => false do |t|
Un has_and_belongs_to_many
tableau doit correspondre à ce format. Je suis en supposant que les deux modèles d'être rejoint par has_and_belongs_to_many
sont déjà dans la base de données : apples
et oranges
:
create_table :apples_oranges, :id => false do |t|
t.references :apple, :null => false
t.references :orange, :null => false
end
# Adding the index can massively speed up join tables. Don't use the
# unique if you allow duplicates.
add_index(:apples_oranges, [:apple_id, :orange_id], :unique => true)
Si vous utilisez l' :unique => true
sur l'indice, alors vous devriez (en rails3) pass :uniq => true
de has_and_belongs_to_many
.
Plus d'informations: Rails Docs
Mise à JOUR 2010-12-13 je l'ai mis à jour pour supprimer les id et les horodatages... Fondamentalement MattDiPasquale
et nunopolonia
sont corrects: Il ne doit pas être un id et il ne doit pas être horodateurs ou des rails de ne pas autoriser has_and_belongs_to_many
de travail.
Vous devez nommer le tableau les noms des 2 modèles, que vous voulez vous connecter par ordre alphabétique et mettre l’id modèle à deux dans la table. Puis connectez chaque modèle à l’autre créant les associations dans le modèle.
Voici un exemple :
Mais ce n’est pas très flexible et vous devriez penser à l’aide de has_many : par le biais
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.