我和一些同学联合起来为期末项目制作了一个谋杀之谜游戏。这就像是一款"选择你自己的冒险"游戏。一旦读者读了一段故事线,就会出现选择题,告诉他们下一步该怎么做。根据他们的反应,这将导致下一个适当的场景。
我们的故事线被存储在一个叫做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
时,您将以干净的状态开始。