如何运行续集迁移,使用行中的值更新新添加的列?
Sequel文档显示了如何使用静态值更新列:
self[:artists].update(:location=>'Sacramento')
我需要做的是使用ID列的值更新新列:
类似的东西:
self[:artists].each |artist| do
artist.update(:location => artist[:id])
end
但上述情况不起作用,我一直无法弄清楚如何去做。
谢谢!
答案 0 :(得分:2)
artist
是Hash
,因此您正在调用Hash#update
,它只更新Hash
实例,而不会修改数据库。这就是你的循环似乎没有做任何事情的原因。
我可以解释如何使循环工作(使用all
代替each
并更新限制为匹配主键值的数据集),但因为您只是分配一列的值对于所有行的另一列的值,您可以这样做:
self[:artists].update(:location=>:id)
答案 1 :(得分:0)
如果您需要更新表的所有行,因为它是一个需要填充的新列
artists = DB[:artists]
artists.where(:id => 1).update(:column_name1 => 'new value1', :column_name2 => "other")
或者如果您需要,只需在迁移文件中更新唯一的行即可:
@DataProvider(name = "data1")
public Object[][] data1() throws Exception{
Object[][] retObj = Utils.getExcelData(DATAFILE, sheet, "xxx", "yyy");
return retObj;
}
@Test(priority=1, dataProvider="data1", groups={"group1"})
public void TestCase1(Integer id, Map<String,String> hmData, ITestContext ctx) throws Exception {
try {
Utils.logTitle(1);
setAttribute(hmData, ctx);
populateMaps(hmData);
runProvision();
buildSummaryPassed();
} catch (Exception e) {
buildReporterSummary(e.getMessage());
buildSummaryFailed(e.getMessage());
}
}