2017-05-23 2 views
0

so habe ich folgendes in meiner seeds.rb Datei:seeds.rb Schienen db: Samen nicht funktioniert

pop_culture = Category.create(category_name: 'Pop Culture') 
sports = Category.create(category_name: 'Sports') 
tazos = Category.create(category_name: 'Tazos') 
woolworths = Category.create(category_name: 'Woolworths') 
Subcategory.create(subcategory_name: 'AFL', category: sports) 
Subcategory.create(subcategory_name: 'NRL', category: sports) 
Subcategory.create(subcategory_name: 'Basketball', category: sports) 
Subcategory.create(subcategory_name: 'Baseball', category: sports) 
Subcategory.create(subcategory_name: 'Cricket', category: sports) 
Subcategory.create(subcategory_name: 'Ninja Turtles', category: pop_culture) 
Subcategory.create(subcategory_name: 'Pokemon', category: pop_culture) 
Subcategory.create(subcategory_name: 'Final Fantasy', category: pop_culture) 
Subcategory.create(subcategory_name: 'Marvel Cards', category: pop_culture) 
Subcategory.create(subcategory_name: 'DC', category: pop_culture) 
Subcategory.create(subcategory_name: 'Yu-gi-oh', category: pop_culture) 
Subcategory.create(subcategory_name: 'Looney Tunes', category: tazos) 
Subcategory.create(subcategory_name: 'Cheetahs', category: tazos) 
Subcategory.create(subcategory_name: 'Star Wars', category: tazos) 
Subcategory.create(subcategory_name: 'Simpsons', category: tazos) 
Subcategory.create(subcategory_name: 'Space Jam', category: tazos) 
Subcategory.create(subcategory_name: 'Dreamworks', category: woolworths) 
Subcategory.create(subcategory_name: 'Disney Dominoes', category: woolworths) 
Subcategory.create(subcategory_name: 'Marvel Discs', category: woolworths) 

und wenn ich die db:seed in meinem Terminal laufen wirft er einen Fehler:

rails aborted! ActiveModel::MissingAttributeError: can't write unknown attribute category_id /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/attribute.rb:182:in with_value_from_database' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/attribute_set.rb:53:in write_from_user' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/attribute_methods/write.rb:50:in write_attribute_with_type_cast' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/attribute_methods/write.rb:32:in write_attribute' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/attribute_methods.rb:361:in []=' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/associations/belongs_to_association.rb:76:in replace_keys' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/associations/belongs_to_association.rb:14:in replace' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/associations/singular_association.rb:22:in writer' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/associations/builder/association.rb:119:in category=' /var/lib/gems/2.3.0/gems/activemodel-5.0.2/lib/active_model/attribute_assignment.rb:46:in public_send' /var/lib/gems/2.3.0/gems/activemodel-5.0.2/lib/active_model/attribute_assignment.rb:46:in _assign_attribute' /var/lib/gems/2.3.0/gems/activemodel-5.0.2/lib/active_model/attribute_assignment.rb:40:in block in _assign_attributes' /var/lib/gems/2.3.0/gems/activemodel-5.0.2/lib/active_model/attribute_assignment.rb:39:in each' /var/lib/gems/2.3.0/gems/activemodel-5.0.2/lib/active_model/attribute_assignment.rb:39:in _assign_attributes' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/attribute_assignment.rb:26:in _assign_attributes' /var/lib/gems/2.3.0/gems/activemodel-5.0.2/lib/active_model/attribute_assignment.rb:33:in assign_attributes' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/core.rb:319:in initialize' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/inheritance.rb:65:in new' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/inheritance.rb:65:in new' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/persistence.rb:33:in create' /home/vic/railsapps/Swap_Deck/db/seeds.rb:12:in <top (required)>' /var/lib/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in load' /var/lib/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in block in load' /var/lib/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:259:in load_dependency' /var/lib/gems/2.3.0/gems/activesupport-5.0.2/lib/active_support/dependencies.rb:287:in load' /var/lib/gems/2.3.0/gems/railties-5.0.2/lib/rails/engine.rb:549:in load_seed' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/tasks/database_tasks.rb:268:in load_seed' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/railties/databases.rake:196:in block (2 levels) in ' /var/lib/gems/2.3.0/gems/railties-5.0.2/lib/rails/commands/rake_proxy.rb:14:in block in run_rake_task' /var/lib/gems/2.3.0/gems/railties-5.0.2/lib/rails/commands/rake_proxy.rb:11:in run_rake_task' /var/lib/gems/2.3.0/gems/railties-5.0.2/lib/rails/commands/commands_tasks.rb:51:in run_command!' /var/lib/gems/2.3.0/gems/railties-5.0.2/lib/rails/commands.rb:18:in ' /home/vic/railsapps/Swap_Deck/bin/rails:9:in require' /home/vic/railsapps/Swap_Deck/bin/rails:9:in ' /var/lib/gems/2.3.0/gems/spring-2.0.1/lib/spring/client/rails.rb:28:in load' /var/lib/gems/2.3.0/gems/spring-2.0.1/lib/spring/client/rails.rb:28:in call' /var/lib/gems/2.3.0/gems/spring-2.0.1/lib/spring/client/command.rb:7:in call' /var/lib/gems/2.3.0/gems/spring-2.0.1/lib/spring/client.rb:30:in run' /var/lib/gems/2.3.0/gems/spring-2.0.1/bin/spring:49:in <top (required)>' /var/lib/gems/2.3.0/gems/spring-2.0.1/lib/spring/binstub.rb:31:in load' /var/lib/gems/2.3.0/gems/spring-2.0.1/lib/spring/binstub.rb:31:in <top (required)>' /home/vic/railsapps/Swap_Deck/bin/spring:15:in ' bin/rails:3:in load' bin/rails:3:in ' Tasks: TOP => db:seed (See full trace by running task with --trace)

also, muss ich etwas reparieren? Ich kann es bekommen, um nur die Kategorien zu säen und das funktioniert, aber ich brauche auch die Unterkategorien, wie ich sie für ein Drop-Down auf meiner Website will.

Ich habe versucht, diese dumme Sache zu bekommen für Alter zu arbeiten, aber ich kann meinen Kopf nicht um die ganze Kategorie/Unterkategorie Sache bekommen .... egal was ich versuche, ...

der Migrationen Code für die Kategorien und Subkategorien:

class CreateCategories < ActiveRecord::Migration[5.0] 
    def change 
    create_table :categories do |t| 
     t.integer :category_id 
     t.string :category_name 
     t.references :subcategory_id, foreign_key: true 

     t.timestamps 
    end 
    end 
end 

class CreateSubcategories < ActiveRecord::Migration[5.0] 
    def change 
    create_table :subcategories do |t| 
     t.integer :subcategory_id 
     t.string :subcategory_name 
     t.references :category_id, foreign_key: true 

     t.timestamps 
    end 
    end 
end 
+0

Fehler sagen, dass Subcategory-Modell category_id Spalte nicht hat. Ist es wahr? Können Sie Struktur und Modelle Code für Kategorie und Unterkategorie zeigen –

+0

meine Modelle sind wie folgt: Klasse Unterkategorie

+0

meine Antwort Ist das Problem gelöst? – Pavan

Antwort

0

rails aborted! ActiveModel::MissingAttributeError: can't write unknown attribute category_id

der Fehler sagt, dass Sie category_id Attribut in subcategories Tabelle fehlen. stellen Sie sicher, dass Sie das haben, um den Fehler zu beheben.

+0

Danke für die Antwort, aber in meinen Migrationen heißt es, es gibt eine Kategorie_ID: Klasse CreateSubcategories

+0

@VicAlfieri Ist die Tabelle Unterkategorien in DB hat 'category_id' auch? – Pavan

+0

@VicAlfieri der Migrationscode hat das Kommentarzeichen '#' am Anfang des Strings mit 'category_id' Spalte' # t.integer: subcategory_id'. Möglicherweise haben Sie deshalb keine 'category_id' in Ihrer Datenbanktabelle. –

0

Mit Blick auf Ihre Samen nehme ich an, dass eine Kategorie mehrere Unterkategorien haben kann.

In diesem Fall sollten Sie Ihre Migrationen sein:

class CreateCategories < ActiveRecord::Migration[5.0] 
    def change 
    create_table :categories do |t| 
     t.string :category_name 
     t.timestamps 
    end 
    end 
end 


class CreateSubcategories < ActiveRecord::Migration[5.0] 
    def change 
    create_table :subcategories do |t| 
     t.string :subcategory_name 
     t.references :category, foreign_key: true 
     t.timestamps 
    end 
    end 
end 

Sie eine Primärschlüsselspalte namens id automatisch generieren nicht brauchen category_id und subcategory_id wie die Migration zu spezifizieren.

Vollständige Einzelheiten, wie Migrationen zu verwenden sind here angegeben

und Ihre Modelle sollten sein:

class Category < ApplicationRecord 
    has_many :subcategories 
end 

class Subcategory < ApplicationRecord 
    belongs_to :category 
end 

Außerdem empfehle ich Ihnen die category_name zu Namen und subcategory_name zu Namen umbenennen. Die Verwendung von Präfix ist redundant.

+0

Dieses Problem wurde jetzt mit Hilfe einiger praktischer Leute im wirklichen Leben gelöst. Danke nochmal für die Hilfe! –

Verwandte Themen