【问题标题】:Rails migration to change empty strings to nullRails迁移将空字符串更改为null
【发布时间】:2016-06-09 11:13:45
【问题描述】:

假设我有一个名为 fruit 的 db 表,如下所示:

id  name
1   ““
2   “"
3   ““
4   ““
5   ""
6   melon

在这种情况下,我需要编写一个迁移来将空字符串更改为 null 而不会影响melon

会是这几行吗?

def change
  update_column fruits, :name, null if :name => ""
end

我猜是非常基本的东西,但我有点卡在这里。 这里最好的方法是什么?

【问题讨论】:

  • 为什么不直接做一个update_all, Fruit.where(name: "").update_all(name: nil)
  • @lusketeer 你的意思是在迁移中使用它?
  • 任何地方,rails 控制台,迁移,你真的不需要迁移,但如果想保持一致,请将其添加到迁移中
  • @lusketeer 是的,一致性是这里的游戏名称 :-),它在迁移中发挥了重要作用,将其放入答案中,我会接受。

标签: ruby-on-rails database-migration rails-migrations


【解决方案1】:
Fruit.where(name: "").update_all(name: nil)

rails 控制台,迁移,任何你可以执行它的地方。您实际上并不需要迁移,但如果想要保持一致,请将其添加到迁移中

【讨论】:

    【解决方案2】:

    在控制台开发和生产中也是如此:

    Fruit.all.each do |fruit|
      if fruit.name == ""
        fruit.name = nil
        fruit.save
      end
    end
    

    【讨论】:

    • 谢谢,但我更喜欢迁移。
    【解决方案3】:

    使用普通命令生成迁移;

    rails g migration xxxxx
    

    然后加上:

    def change
      execute "UPDATE fruits SET name = NULL WHERE name = '' "
    end 
    

    【讨论】:

    • 在sql中你使用name IS NULL
    • 我在 postgres 中使用 (IS null) 运行查询,它给出了错误“在“IS”处或附近出现语法错误”
    • 好的,抱歉,我误读了您的查询,它设置为 null - 它不会搜索 null
    • 我不会投赞成票,因为答案格式不正确而且不是一个很好的答案,但我删除了我的投反对票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 2011-08-23
    相关资源
    最近更新 更多