在SQLite DB中不保存的Ruby datetime属性值

时间:2014-05-28 00:36:21

标签: ruby-on-rails ruby sqlite datetime

我尝试使用' sale_price'来保存订单对象。 (浮动)和' order_date' (datetime)属性到SQLite DB。日志中的所有内容都使得看起来两个属性类型都为每个Order对象正确保存。但是,当我检查数据库时,所有订单对象' order_date'属性是零。这是代码:

response["orders"].each do |n|

        balance = n["balance"]

        sale_price = balance.to_f

        order_date = n["created_date"]

        order = Order.new(sale_price: sale_price, order_date: order_date)

        if Order.where(order_date: order_date).exists?

            puts "That order already exists in the DB"

        else

            if (order.sale_price || order.order_date) != nil 

                order.save

            else
                p "The sale price is nil"
            end

        end     

    end

以下是日志中示例事务的样子:

    Order Exists (0.9ms)  SELECT 1 AS one FROM "orders" WHERE "orders"."order_date" = '2013-12-06T15:53:36.424Z' LIMIT 1
   (0.1ms)  begin transaction
  SQL (0.5ms)  INSERT INTO "orders" ("created_at", "order_date", "sale_price", "updated_at") VALUES (?, ?, ?, ?)  [["created_at", Tue, 27 May 2014 22:59:02 UTC +00:00], ["order_date", Fri, 06 Dec 2013 15:53:36 UTC +00:00], ["sale_price", 20548.0], ["updated_at", Tue, 27 May 2014 22:59:02 UTC +00:00]]
   (3.1ms)  commit transaction

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

删除'development.sqlite3'并重新运行我的迁移修复它(感谢John W。)

看起来我在添加'order_date'属性之前已经保存了所有Order对象,所以当我再次保存它们时,'order_date'属性我只能看到没有它的初始Order对象从原始保存在控制台中。糟糕。

答案 1 :(得分:1)

(来自@dougiebuckets中提到的John W回答)我认为最有可能发生的事情(以及为什么删除你的sqlite db文件有效)是你正在查看创建的第一个记录。由于您在稍后的迁移中将order_date字段添加到Order,因此对于order_date,这些第一个记录的值为nil,因为创建它们时该字段不存在。

我也作弊,因为我可以访问@dougiebuckets源代码。 :)但这是我的第一个SO答案,所以让我有些松懈。 :d