【问题标题】:Rails migration script changes does not persistRails 迁移脚本更改不会持续存在
【发布时间】:2014-03-25 11:08:57
【问题描述】:

我编写了一个迁移脚本来更新 ActiveRecord 中所有以前的记录。

class UpdateListCompletedAtFields < ActiveRecord::Migration

def up
    Car.find_each do |car|
        if car.list_car_step_3_finished?
            car.list_completed_at = Time.now
            puts "Car #{car.id} list_completed, updating list_completed_at: #{car.list_completed_at}"
        end
    end
  end

end

当我运行迁移脚本时,puts 消息正确输出字段 car.list_completed_at,但是当我进入 rails 控制台(在我退出后)并尝试检查数据时,迁移没有持续。我想知道我是否遗漏了什么?

Car.all.map{|m| [m.list_car_step_3_finished, m.list_completed_at]}
=>[[true, nil], [true, nil], [nil, nil], [nil, nil], [nil, nil], [nil, nil], [nil, nil], [nil, nil], [nil, nil], [true, nil], [nil, nil]]

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    你忘记保存car记录:

    car.list_completed_at = Time.now
    car.save
    # (...)
    

    【讨论】:

    • 嗨。我真的想知道为什么你在这个问题stackoverflow.com/questions/22629261/… 中删除了你的答案,尽管它是正确的,你是第一个回答的人。如果这不是与你交流的正确方式,请原谅我.
    • @Pavan 我没有仔细阅读这个问题,所以我的回答根本不正确。
    • 但是你的答案是对的,看看剩下的答案。这些都和你的答案一样。
    • 是的!你是对的。但是根据问题的标题,你的答案和剩下的都是对的!除了 OP 询问“是否有超过 1 个”的异常部分:)
    【解决方案2】:

    使用update_attribute更新数据库

    if car.list_car_step_3_finished?
       car.update_attribute(:list_completed_at, Time.now)
       puts "Car #{car.id} list_completed, updating list_completed_at:#car.list_completed_at}"
    end  
    

    【讨论】:

      猜你喜欢
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2012-07-26
      相关资源
      最近更新 更多