【问题标题】:Loading data from fixtures to the database ( associations )将数据从夹具加载到数据库(关联)
【发布时间】:2017-08-27 14:10:00
【问题描述】:

我有两个模型,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

项目.rb

class Project < ActiveRecord::Base
  has_many :todos
end

tod​​o.rb

class Todo < ActiveRecord::Base
  belongs_to :project
end

projects.yml

family:
  title: 'Семья'

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

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

tod​​os.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 文件添加日期?

【问题讨论】:

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


    【解决方案1】:

    链接表之间关联的更好方法之一是使用引用。您可以对待办事项表执行此操作

    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
    

    这将在您的 todos 表中创建一个名为 project_id 的字段。因此,您有一个包含 has_many todos 的项目表。

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

    proj = Project.create(title: family)
    

    如果你有一个包含所有家庭待办事项的数组,那么你可以像这样把它放在数据库中

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

    【讨论】:

    • 你能回答我吗 - 我怎样才能得到所有的待办事项?例如,我需要打印我家庭项目中的所有待办事项。
    • 你可以这样做
    【解决方案2】:

    如果你想预先填充你的数据库,那么更好的方法是使用seeds.rb,它位于db/

    只需在此处使用 ruby​​ 和 Rails 应用程序中的类,例如,为其创建一个项目和一个待办事项:

    project = Project.create!(...)
    project.todos.create!(...)
    

    然后只需运行rake db:seed 即可执行。

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

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多