铁轨上的红宝石。创建具有关联的对象时出现种子错误

时间:2015-06-22 18:14:01

标签: ruby-on-rails ruby seeding

我正在尝试创建一个任务管理原型。我创建了两个模型 - 类别和任务,而任务属于类别,类别可以包含许多任务。

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相关的任务

1 个答案:

答案 0 :(得分:0)

只需要传递对象:

c1 = Category.find_or_create_by(name: 'Category1')

我建议使用find_or_create_by不创建两次相同的数据

Task.find_or_create_by(name: 'TASK1', category: c1)

如果不起作用,请尝试在控制台中创建相同的数据

我希望能帮到你