我正在尝试创建一个任务管理原型。我创建了两个模型 - 类别和任务,而任务属于类别,类别可以包含许多任务。
class Category < ActiveRecord::Base
has_many :tasks
end
并且
class Task < ActiveRecord::Base
belongs_to :category
end
然后在迁移文件中
class CreateTasks < ActiveRecord::Migration
def change
create_table :tasks do |t|
t.string :name
t.string :note
t.references :category
t.timestamps null: false
end
end
end
和
class CreateCategories < ActiveRecord::Migration
def change
create_table :categories do |t|
t.string :name
t.string :description
t.timestamps null: false
end
end
end
我尝试播种一些数据以开始使用,这是种子文件
c1 = Category.create(name: 'Category1')
Task.create(name: 'TASK1', category_id: c1.id)
然而它给了我错误:
rake db:seed
rake aborted!
ActiveRecord::UnknownAttributeError: unknown attribute 'category_id' for Task.
我也尝试了以下内容
Task.create(name: 'TASK1', category: c1)
Task.create(name: 'TASK1', category: c1.id)
我收到了错误
rake db:seed
rake aborted!
ActiveRecord::AssociationTypeMismatch: Category(#70174570341620) expected, got Fixnum(#70174565126780)
但是在浏览器中,@ category.id会加载并显示(作为两位数的数字33)。
认为我可能会遗漏一些明显的东西,但无法弄清楚为什么我无法从播种数据中创建与特定类别c1相关的任务
答案 0 :(得分:0)
只需要传递对象:
c1 = Category.find_or_create_by(name: 'Category1')
我建议使用find_or_create_by
不创建两次相同的数据
Task.find_or_create_by(name: 'TASK1', category: c1)
如果不起作用,请尝试在控制台中创建相同的数据
我希望能帮到你