【问题标题】:Sequel Migration update with a row's ID带有行 ID 的 Sequel Migration 更新
【发布时间】:2015-07-08 06:35:09
【问题描述】:

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

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

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

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

类似:

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

但上述方法不起作用,我一直无法弄清楚如何让它去。

谢谢!

【问题讨论】:

    标签: ruby migration sequel


    【解决方案1】:

    您的循环中的artistHash,因此您正在调用Hash#update,它只是更新Hash 实例,它不会修改数据库。这就是为什么您的循环似乎没有做任何事情的原因。

    我可以解释如何使循环工作(使用 all 而不是 each 并更新限制为匹配主键值的数据集),但是因为您只是将一列的值分配给所有行的另一列,您可以这样做:

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

    【讨论】:

    • 太棒了,谢谢杰里米。没有意识到我可以将列名作为符号传递。
    【解决方案2】:

    如果您需要更新表的所有行,因为它是需要填充的新列

    artists = DB[:artists]
    artists.update(:column_name => 'new value')
    

    或者,如果您需要,只需将唯一行更新到您的迁移文件中即可:

    artists = DB[:artists]
    artists.where(:id => 1).update(:column_name1 => 'new value1', :column_name2 => "other")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多