我在这里对Ruby on Rails相当新。
我有2个提供的迁移文件。第一个以001为前缀,为该表创建一个表和一些列。下一个迁移文件(以002为前缀)将行插入到文件001中创建的表中。
正确运行迁移(rake db:migrate in command line)会创建表,但不会插入任何问题的数据。插入的代码如下所示(除了更多的Student.create语句,
)class AddStudentData < ActiveRecord::Migration
def self.up
...
Student.create(:name => "Yhi, Manfredo", :gender => "M")
...
end
def self.down
Student.delete_all
end
end
我的理解是学生是一个模范对象,所以我的学生模型看起来像这样,
class Student < ActiveRecord::Base
end
我是否需要在Student中明确定义一个create方法,或者是给出了什么? (这个项目是用脚手架制作的)
感谢。
编辑1:我使用了达米恩的建议并拨打了create!
而不是create
但得到了相同的回复。然后我做了什么来看看代码是否达到了那么远就是这个,
Student.create12312313!(:name => "foo", :gender => "M")
这显然是无效的代码,迁移没有抛出任何错误。
Edit2:找到答案。 schema_migrations表的版本设置为3,我只有3个不同的迁移文件,因此它从未运行过任何迁移文件。这就是为什么没有任何东西在进行更新,而且我所使用的伪造的东西从未抛出错误。第一次没有插入学生数据的原因是因为某个表已经在数据库中,并且在我第一次迁移时导致了冲突。所以我真正想要的不是db:migrate
,而是db:reset
好几个小时。
答案 0 :(得分:1)
create
方法继承自ActiveRecord::Base
所以不,你不需要定义它。
无法包含数据的一个原因是您的验证未通过。
您可以使用create!
代替create
轻松查看错误,从而无法包含您的数据
因此,如果无法创建模型,则会抛出异常并且迁移将失败。
答案 1 :(得分:0)
您可能希望查看rails 2.3.4中的数据种子。你的rails迁移真的在运行001_create_whatever.rb吗?或者你只是以此为例?自2.2.2(iirc)迁移以来一直使用时间戳,例如10092009 .... create_whatever.rb
你的导轨版本多久了?
答案 2 :(得分:0)
如果他们的架构号在数据库中,则不会运行迁移。
对于较旧版本的rails,将会有一行执行最高迁移。
对于较新的版本,每次迁移都会获得一个唯一的时间戳作为其版本号,并在添加时获得schema_migrations中自己的行。