2017-10-10 2 views
0

En supposant la migration suivante:ActiveRecord se plaint colonne (pour référence) n'existe pas, donc je le créer manuellement et il se plaint qu'il existe

class AddSectionReferences < ActiveRecord::Migration 
    def change 

    add_reference :sections, :sections, index: true, foreign_key: true, on_delete: :nullify 
    add_reference :sections, :parent 
    end 
end 

Il se plaint:

ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "section_id" referenced in foreign key constraint does not exist 
: ALTER TABLE "sections" ADD CONSTRAINT "fk_rails_810c69e885" 

si si j'ajoute:

add_column :sections, :sections_id, :integer 

avant la référence, il se plaint alors: Que se passe-t-il, pourquoi cherche-t-il une colonne section_id dans la première erreur quand j'essaye de créer une colonne plurielle (pour un has_many)?

Répondre

1

lorsque j'essaie de créer une colonne plurielle (pour un has_many)?

Vous vous rapprochez de la mauvaise extrémité. Comment imaginez-vous cette colonne pour contenir des ID multiples/infinis? Ce n'est pas comme ça que les rails attendent les choses.

Dans une relation has_many, la colonne de clé étrangère est du côté belongs_to. Et le nom de la colonne devrait être singulier, naturellement. Car il ne peut contenir qu'un seul identifiant.

t.references :section 
+0

http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association OP devrait suivre cette – Mark

+0

@ Mark: vous pensez que ce soit le cas? –

+0

De l'apparence de sa question, il n'a pas encore lu :( – Mark