我和一些同学联合起来,为期末项目制作了一个谋杀悬疑游戏。这就像一个“选择你自己的冒险”的游戏。一旦读者阅读了故事情节的一部分,他们就会看到关于下一步应该做什么的多项选择题。根据他们的反应,这将导致下一个适当的场景。
我们的故事情节存储在一个名为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的第三分支。一旦完成此操作,它们将被带回主分支。
我们被指示使用seeds.rb文件将适当的编号添加到场景中。指向这些场景的URL也将具有相同的编号系统。我们必须把这一切联系在一起。
在这方面我们真的被难住了,我们希望能得到一些帮助。如果需要进一步澄清,请让我知道,我会尽我所能。非常感谢你们。
发布于 2014-07-25 04:40:43
我不能给你一个例子,让你看到更多关于你的模型的细节。听起来您有一个用于自引用的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时,您是在一个干净的状态下开始。
https://stackoverflow.com/questions/24942663
复制相似问题