153 votes

Migration Rails : t.references avec nom alternatif ?

J'ai donc une Create_table comme celle-ci pour les cours dans une école :

create_table :courses do |t|
  t.string :name
  t.references :course
  t.timestamps
end

mais je veux qu'il fasse référence à deux autres cours comme :

has_many :transferrable_as # A Course
has_many :same_as          # Another Course

Puis-je dire ce qui suit ?

t.references :transferrable_as, :as=> :course

220voto

Ryan Points 3492

Vous pouvez tout faire dans la définition initiale de la migration/colonne (au moins actuellement dans Rails 5) :

t.references :transferable_as, index: true, foreign_key: {to_table: :courses}
t.references :same_as, index: true, foreign_key: {to_table: :courses}

15voto

Pour répondre à cette question -- le modèle devrait avoir la ligne suivante pour compléter l'association :

    belongs_to :transferrable_as, class_name: "Course"
    belongs_to :same_as, class_name: "Course"

14voto

themirror Points 1917

Je pense que ce fil a une manière différente plus Rails-ish : Echafaudage ActiveRecord : deux colonnes du même type de données

Dans la migration :

t.belongs_to :transférable_as

t.belongs_to :same_as

1voto

j.. Points 5862

Je ne pense pas que references accepte l'option :as, mais vous pouvez créer vos colonnes manuellement...

create_table :courses do |t| 
  t.string  :name 
  t.integer :course1_id
  t.integer :course2_id 
  t.timestamps 
end 

Prograide.com

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.

Powered by:

X