Ruby on Rails:seeds.rb和编号

时间:2014-07-24 19:45:05

标签: ruby-on-rails ruby

我和一些同学一起为最终项目创造了一个谋杀神秘游戏。这就像是“选择你自己的冒险”游戏。一旦读者阅读了故事情节的一部分,就会向他们提出关于他们接下来应该做什么的多项选择问题。根据他们的反应,这将导致下一个适当的场景。

我们的故事情节存储在名为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也将具有相同的编号系统。我们必须把它们连在一起。

我们真的对这部分感到困惑,我们会感激一些帮助。如果需要进一步说明,请告诉我,我会尽力而为。非常感谢你们。

1 个答案:

答案 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时,您将开始干净的状态。