-1

Cette erreur apparaît lorsque j'essaie de lancer mon application.ActiveRecord :: unknownAttributeError lors de l'ensemencement des données

enter image description here

lien vers mon repo

Ce que je l'ai fait est: -Création une application rails -créée quatre modèles comme décrit dans le schéma

ActiveRecord::Schema.define(version: 20160823102902) do 

    create_table "profiles", force: :cascade do |t| 
    t.string "gender" 
    t.integer "birth_year" 
    t.string "first_name" 
    t.string "last_name" 
    t.integer "User_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "todo_items", force: :cascade do |t| 
    t.date  "due_date" 
    t.string "title" 
    t.text  "description" 
    t.boolean "completed", default: false 
    t.integer "TodoList_id" 
    t.datetime "created_at",     null: false 
    t.datetime "updated_at",     null: false 
    end 

    add_index "todo_items", ["TodoList_id"], name: "index_todo_items_on_TodoList_id" 

    create_table "todo_lists", force: :cascade do |t| 
    t.string "list_name" 
    t.date  "list_due_date" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "User_id" 
    end 

    add_index "todo_lists", ["User_id"], name: "index_todo_lists_on_User_id" 

    create_table "users", force: :cascade do |t| 
    t.string "username" 
    t.string "password_digest" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    end 

end 

et j'ai quelques les relations entre les quatre modèles que j'ai créés comme décrit dans le fichier modèle

class User < ActiveRecord::Base 
    has_one :profile , dependent: :destroy 
    has_many :todo_lists 
    has_many :todo_items,through: :todo_lists,source: :todo_items 
end 

class Profile < ActiveRecord::Base 
    belongs_to :user 
end 

class TodoList < ActiveRecord::Base 
    belongs_to :user 
    has_many :todo_items , dependent: :destroy 
end 

class TodoItem < ActiveRecord::Base 
    belongs_to :todo_list 
end 

L'erreur a commencé à se produire lorsque j'ai ajouté quelques données dans le fichier seed.rb comme indiqué

User.destroy_all 

User.create! [ 
    {username: "Fiorina" , password_digest: "123"}, 
    {username: "Trump" , password_digest: "456"}, 
    {username: "Carson" , password_digest: "789"}, 
    {username: "Clinton" , password_digest: "abc"},  
] 
User.find_by!(username: "Fiorina").create_profile(first_name: "Carly" , last_name: "Fiorina") 
User.find_by!(username: "Trump" ).create_profile(first_name: "Donald" , last_name: "Trump" ) 
User.find_by!(username: "Carson").create_profile(first_name: "Ben" , last_name: "Carson" ) 
User.find_by!(username: "Clinton").create_profile(first_name: "Hillary", last_name: "Clinton") 

quelqu'un pourrait me expliquer ce que cela signifie erreur, ou ce que je suis censé faire?

Répondre

0

Le problème est lié au nom de la colonne dans la table profiles. Son User_id, mais il devrait en fait être user_id (Convention sur la configuration)

Vous pouvez résoudre ce problème en renommant la colonne (à la fois dans profiles et todo_lists)

rails g migration rename_user_id 

Cela va générer un nouveau fichier de migration dans votre dossier db/migrate . Modifiez le fichier de migration en ajoutant ce qui suit à la méthode change.

rename_column :profiles, :User_id, :user_id 

Vous voudriez également faire le changement de nom pour ne fonctionne pas :(User_id colonne todo_lists table comme

rename_column :todo_lists, :User_id, :user_id 
+0

, mais maintenant je sais où est le problème, cela pourrait être résolu en recréant les modèles? –

+0

Vous n'avez pas besoin de recréer les modèles Avez-vous lancé 'rake db: migrate' après avoir édité les migrations? Si oui, quelle erreur obtenez-vous maintenant? C'est la solution que je suis sûr. une colonne 'user_id' mais vous l'avez mise en majuscule, donc renommer le champ devrait évidemment marcher –

+0

Oui, je suis sûr à ceci est le problème, mais l'erreur n'a pas changé, et aussi le schéma n'a pas changé bien qu'il pointe maintenant à notre migration, peut-être j'ai ajouté les lignes à tort –