所以我的seeds.rb文件中有以下内容:
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
时,它会抛出错误:
轨道中止!活动模型::缺少属性错误:无法写入未知 属性
category_id
/var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/attribute.rb:182:inwith_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:inwrite_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:inreplace' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/associations/singular_association.rb:22:in
作家'/var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/associations/builder/association.rb:119:incategory=' /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
块在_assign_attributes'/var/lib/gems/2.3.0/gems/activemodel-5.0.2/lib/active_model/attribute_assignment.rb:39:ineach' /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:ininitialize' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/inheritance.rb:65:in
新'/var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/inheritance.rb:65:innew' /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:inblock 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:inload' /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:inload_seed' /var/lib/gems/2.3.0/gems/activerecord-5.0.2/lib/active_record/railties/databases.rake:196:in
块(2 级)在 '/var/lib/gems/2.3.0/gems/railties-5.0.2/lib/rails/commands/rake_proxy.rb:14:inblock 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:inrun_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:inrequire' /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:inload' /var/lib/gems/2.3.0/gems/spring-2.0.1/lib/spring/client/rails.rb:28:in
呼叫'/var/lib/gems/2.3.0/gems/spring-2.0.1/lib/spring/client/command.rb:7:incall' /var/lib/gems/2.3.0/gems/spring-2.0.1/lib/spring/client.rb:30:in
跑'/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
' 箱/轨:3:load' bin/rails:3:in
' 任务:TOP => db:seed(通过使用 --trace 运行任务来查看完整跟踪)
那么,有什么需要解决的吗?我可以让它只播种类别并且有效,但我也需要子类别,因为我希望它们在我的网站上下拉。
多年来,我一直试图让这个愚蠢的东西发挥作用,但我无法理解整个类别/子类别的事情。
类别和子类别的迁移代码:
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
轨中止!活动模型::缺少属性错误:无法写入未知 属性category_id
该错误告知您在表中缺少category_id
属性subcategories
。 确保您有它来修复错误。
看看你的种子,我假设一个类别可以有多个子类别。
在这种情况下,您的迁移应为:
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 的主键列。
此处指定了如何使用迁移的完整详细信息
并且您的模型应该是:
class Category < ApplicationRecord
has_many :subcategories
end
class Subcategory < ApplicationRecord
belongs_to :category
end
此外,我建议您将category_name重命名为name,将subcategory_name重命名为name。前缀的使用是多余的。
在seeds.rb
文件内的迁移之前添加以下行
Category.reset_column_information
Subcategory.reset_column_information