Ruby on Rails:种子.Rb和编号



我和一些同学联合起来为期末项目制作了一个谋杀之谜游戏。这就像是一款"选择你自己的冒险"游戏。一旦读者读了一段故事线,就会出现选择题,告诉他们下一步该怎么做。根据他们的反应,这将导致下一个适当的场景。

我们的故事线被存储在一个叫做Scene的模型中。如果他们在场景2.3,他们选择答案1,这将把他们带到场景3.1,以此类推。我们有parent_scene_id和child_scene_id。因此,场景2.3是parent_scene_id,一旦他们选择了一个响应,现在就是child_scene_id,它把他们带到新的场景,还是parent_scene_id。这个故事被分成了几个部分。例如,一个场景可能会使他们脱离主要的故事情节来收集证据。

示例:场景2(主分支),他们选择了第一个选项(现在是场景2.1)。如果他们选择场景2.1中的第二个选项,这将把他们带到称为场景2.12的第三个分支。一旦完成,它们将被带回到主分支。

我们已经被指示使用种子。以获得适当的编号进入场景。指向这些场景的URL也将具有相同的编号系统。我们必须把它们联系在一起。

我们真的被这部分难住了,希望你能帮助我们。如果需要进一步澄清,请让我知道,我会尽我所能。非常感谢大家。

我不能给你一个例子,看到更多关于你的模型的细节。听起来你有一个自引用的HABTM连接表,所以,如果我理解正确的话,它是:

class Scene < ActiveRecord::Base
  has_and_belongs_to_many :parent_scenes, 
    :class_name => :Scene, 
    :join_table => :habtm_scenes, 
    :foreign_key => :child_scene_id, 
    :association_foreign_key => :parent_scene_id
  has_and_belongs_to_many :child_scenes, 
    :class_name => :Scene, 
    :join_table => :habtm_scenes, 
    :foreign_key => :parent_scene_id, 
    :association_foreign_key => :child_scene_id
end

和您的迁移将是这样的:

create_table :scene do |t|
  t.integer :major_branch
  t.integer :minor_branch
  t.timestamps
end
create_table :habtm_scenes do |t|
  t.references :child_scene_id
  t.references :parent_scene_id
  t.timestamps
end

所以要播种它,你只需要很多行create!,然后加入关联:

db/seeds.rb:

Scene.transaction do
  scene2_1 = Scene.create!(:major_branch => 2, :minor_branch => 1)
  scene2_2 = Scene.create!(:major_branch => 2, :minor_branch => 2)
  scene2_3 = Scene.create!(:major_branch => 2, :minor_branch => 3)
  scene2_1.child_scenes << scene2_2, scene2_3
end

一旦你把所有这些放在一起,只需运行rake db:seed。我强烈建议将其包装在事务中,如上面的示例所示,这样,如果在初始尝试中出现任何失败,您可以返回并修复代码,因为当您再次运行rake db:seed时,您将以干净的状态开始。

最新更新