将数据从夹具加载到数据库(关联)

时间:2017-04-02 18:55:34

标签: ruby-on-rails ruby database yaml fixtures

我有两个模型,Project和Todo。

Project存储一系列Todos。

项目迁移:

  def up
    create_table :projects do |t|
      t.string :title, null: false
      t.timestamps null: false
    end
  end

Todo的迁移:

  def up
    create_table :todos do |t|
      t.string :text, null: false
      t.boolean :isCompleted, null:false
      t.integer :project_id, null:false
      t.timestamps null: false
    end
  end

project.rb

class Project < ActiveRecord::Base
  has_many :todos
end

todo.rb

class Todo < ActiveRecord::Base
  belongs_to :project
end

projects.yml

family:
  title: 'Семья'

work:
  title: 'Работа'

therest:
  title: 'Прочее'

todos.yml

family_todos:
  text: 'Купить молоко'
  isCompleted: false
  project_id: family

work_todos:
  text: 'Закончить проект'
  isCompleted: false
  project_id: work

therest_todos:
  text: 'Познать бесконечность'
  isCompleted: true
  project_id: therest

如何正确连接它们,所以当我调用一个项目时,我可以看到它里面的所有待办事项?另外,我很好奇如何通过像数组一样的yml文件添加日期?

2 个答案:

答案 0 :(得分:0)

如果您想预先填充数据库,那么更好的方法是使用位于seeds.rb的{​​{1}}。

只需在这里使用ruby和rails应用程序中的类,例如,为它创建一个项目和待办事项:

db/

然后只需运行project = Project.create!(...) project.todos.create!(...) 即可执行它。

您可以在此处阅读更多示例:http://www.xyzpub.com/en/ruby-on-rails/3.2/seed_rb.html

答案 1 :(得分:0)

链接表之间关联的更好方法之一是使用引用。你可以对你的待办事项表

这样做
def up
 create_table :todos do |t|
  t.string :text, null: false
  t.boolean :isCompleted, null:false
  t.references :project, references: :projects, index: true, foreign_key: true
  t.timestamps null: false
 end
end

这将在你的待办事项表中创建一个名为project_id的字段。因此,您有一个带有has_many待办事项的项目表。

您可以通过不同的方式预加载数据库。您可以使用seeds.rb文件,您可以在其中编写代码以从yml文件中读取并加载到数据库。 你可以做这样的事情

proj = Project.create(title: family)

如果您拥有所有家庭待办事项的数组,那么您可以将其放入数据库中

##Family todos
loop through
  proj.todos << Todo.create(...fields...)
end