Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails 3项目中加载种子数据_Ruby On Rails_Fixtures - Fatal编程技术网

Ruby on rails 在Rails 3项目中加载种子数据

Ruby on rails 在Rails 3项目中加载种子数据,ruby-on-rails,fixtures,Ruby On Rails,Fixtures,到目前为止,我一直在使用fixture和rake任务为我的数据库创建一些种子数据。这很有效,但我突然遇到了奇怪的问题,比如自动生成ID为1,2,3。。在一个模型中,然后在连接模型中出现错误的ID,使得关联根本无法工作 因此,我想知道什么是更好的选择。我读过不同的东西,以及railscast的种子数据 我的数据实际上并不共享相同的信息。这就像是必须按原样插入的单独条目。例如,我必须插入1000个具有特定能力和技能的用户。这需要一些连接模型和一些整洁的关联处理,就像fixture一样 那么,有没有比

到目前为止,我一直在使用fixture和rake任务为我的数据库创建一些种子数据。这很有效,但我突然遇到了奇怪的问题,比如自动生成ID为1,2,3。。在一个模型中,然后在连接模型中出现错误的ID,使得关联根本无法工作

因此,我想知道什么是更好的选择。我读过不同的东西,以及railscast的种子数据

我的数据实际上并不共享相同的信息。这就像是必须按原样插入的单独条目。例如,我必须插入1000个具有特定能力和技能的用户。这需要一些连接模型和一些整洁的关联处理,就像fixture一样


那么,有没有比这更好的方法呢

这里有三个不同的选项,我一直在使用它们。让我知道你的想法和进展。祝你一切顺利


Rails 3提供了一些基本的种子设定功能。见:

总结如下:

您可以使用db/seeds.rb中的AR模型将任何种子代码放入Ruby中 然后运行rake db:seed以加载此rake db:setup自动执行此操作 在我的seeds文件中,我倾向于将所有内容包装在事务中,并假设数据库中没有现有数据,手动定义ID。帽尖朝下。例如:

ActiveRecord::Base.transaction do 如果User.count==0&&Role.count==0 user=user.new:name=>Admin,:email=>admin@example.org,:password=>password,:password\u confirmation=>password user.id=1 user.save! user.confirmation\u at=user.confirmation\u发送于 user.save! role1=Role.new:name=>“Admin” 角色1.id=1 救命! role2=Role.new:name=>“成员” role2.id=2 救命! user.role_id=[1,2] user.save! 终止 终止 也许有更好的方法可以做到这一点


在您的情况下,您可以从CSV文件或其他文件加载数据,并以编程方式创建模型对象。

固定ID可能对数据库中的默认数据有用。在@jits的情况下,他不希望ID和角色权限混乱,需要在多个环境或设置中不断修复和维护ID。

您以何种形式提供数据?我现在将其作为固定装置。我希望能够使用类似的技术为它们设定种子。问题是我不想手动定义ID,而是像设备一样通过关联来定义ID。您不必指定ID。ActiveRecord或db将自动分配这些。这与ID无关。这是关于联想的。例如,一个项目可能有一个用户id。Fixtures提供了一种方法,因此我根本不需要处理它。不过,我看不出在这个项目上如何以良好的方式处理关联。ChuckJHardy,这是我使用的标准Fixtures。您可以在那里指定关联。问题是,你能不能在没有固定装置的情况下用另一种更合适的方式来做呢?你有没有可能添加一个模式,我会为你试一试。谢谢:我实际上写了我自己的seeds程序,它以一种很好的方式处理了整个过程。也许我也会上传到github。