续集迁移使用行ID进行更新

时间:2012-11-14 17:10:00

标签: ruby migration sequel

如何运行续集迁移,使用行中的值更新新添加的列?

Sequel文档显示了如何使用静态值更新列:

self[:artists].update(:location=>'Sacramento')

我需要做的是使用ID列的值更新新列:

类似的东西:

self[:artists].each |artist| do
  artist.update(:location => artist[:id])
end

但上述情况不起作用,我一直无法弄清楚如何去做。

谢谢!

2 个答案:

答案 0 :(得分:2)

循环中的

artistHash,因此您正在调用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());
    }
}