我和一些同学一起为最终项目创造了一个谋杀神秘游戏。这就像是“选择你自己的冒险”游戏。一旦读者阅读了故事情节的一部分,就会向他们提出关于他们接下来应该做什么的多项选择问题。根据他们的反应,这将导致下一个适当的场景。
我们的故事情节存储在名为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中选择第二个选项,则会将它们带到名为Scene 2.12的第三个分支。完成后,它们将被带回主分支。
我们已被指示使用seeds.rb文件来获取适当的编号到场景中。指向这些场景的URL也将具有相同的编号系统。我们必须把它们连在一起。
我们真的对这部分感到困惑,我们会感激一些帮助。如果需要进一步说明,请告诉我,我会尽力而为。非常感谢你们。
答案 0 :(得分:0)
我无法举例说明您的模型的更多细节。听起来你有一个用于自引用的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
时,您将开始干净的状态。