2017-05-23 48 views
0

所以我有我的seeds.rb下列文件:seeds.rb轨DB:种子不工作

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) 

,当我运行在我的终端db:seed它抛出一个错误:

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)

那么,有什么我需要修复?我可以让它只播种类别,但是我也需要子类别,因为我希望它们在我的网站上有一个下拉菜单。

我一直试图让这个愚蠢的事了好半天工作,但我不能让我的周围全类别/子事头....不管我怎么努力...

为类别和subcats的迁移代码:

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

错误说子类别模型没有category_id列。这是真的吗?愿你表现出结构和模型代码类别和子类别 –

+0

我的模型如下:类子目录

+0

请问我的回答解决了问题? – Pavan

回答

0

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

错误告诉你缺少category_id属性在subcategories表。确保你有解决这个错误的方法。

+0

感谢您的答案,但在我的迁移说它有一个category_id:class CreateSubcategories

+0

@VicAlfieri是否在DB的子类别表中有'category_id'呢? – Pavan

+0

@VicAlfieri迁移代码在具有'category_id'列'#t.integer:subcategory_id'的字符串的开始处具有注释符号'#'。可能是因为这个,你的数据库表中没有'category_id'。 –

0

看着你的种子,我假设一个类别可以有多个子类别。

在这种情况下,您的迁移应该是:

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 

你并不需要指定CATEGORY_ID和subcategory_id的迁移会自动生成一个主键列名为id。

如何使用迁移全部细节指定here

,你的模型应该是:

class Category < ApplicationRecord 
    has_many :subcategories 
end 

class Subcategory < ApplicationRecord 
    belongs_to :category 
end 

此外,我建议你CATEGORY_NAME重命名为名称和subcategory_name来命名。前缀的使用是多余的。

+0

这个问题现在已经在现实生活中一些便利的人的帮助下解决了。再次感谢所有的帮助! –