我在迁移时使用up
方法定义了以下内容以设置初始数据:
def up
Color.create!({:id=>1,:name=>"",:color=>"FF6633"})
Color.create!({:id=>2,:name=>"",:color=>"93B233"})
Color.create!({:id=>3,:name=>"",:color=>"4D90D9"})
Color.create!({:id=>4,:name=>"",:color=>"C43092"})
end
我可以在truncate
方法上使用down
指令,如:
def down
Color.truncate
end
或者,因为我在创建时设置了ID,我应该只使用模型destroy_all
的{{1}}方法吗?
答案 0 :(得分:7)
您可以在 up
方法中简单地使用它,这也将解决您的截断和ID重置问题。
def up
ActiveRecord::Base.connection.execute("TRUNCATE table_name")
Color.create!({:id=>1,:name=>"",:color=>"FF6633"})
Color.create!({:id=>2,:name=>"",:color=>"93B233"})
Color.create!({:id=>3,:name=>"",:color=>"4D90D9"})
Color.create!({:id=>4,:name=>"",:color=>"C43092"})
end
干杯!
答案 1 :(得分:0)
首先,您不必将:id
传递给create!
,因为ActiveRecord会自动处理,:id
可能会被忽略(假设标准情况)。
其次,在迁移中使用ActiveRecord查询构建器不是一个好习惯,因为如果要更改模型Color名称,那么迁移将会中断。我强烈建议您使用纯SQL并使用execute()
执行该查询。
第三,对于#down
方法,不应截断表。您应该销毁在#up
中创建的4种颜色。
以下是我的写作方式:
def down
colors = ["FF6633", "93B233", "4D90D9", "C43092"]
Color.where(:color => colors).destroy_all
end