ActiveRecord + Pry confusion
这让我困惑不已。
在rake任务中,我用以下代码保存dailyscore模型上的新记录:
1 2 3 4 5 | def save_record_as_daily_score_object(data) @ds = DailyScore.where(date: data[:date]).first_or_create! @ds.update!(data) binding.pry end |
撬杆输出如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | [10] pry(main)> data => {:date=>"2015-09-02", :mail=>-0.6, :times=>-7.1, :telegraph=>-2.2, :guardian=>-4.0, :express=>-0.1, :independent=>-3.2, :average=>-3.4} [11] pry(main)> @ds => #<DailyScore:0x000001098121a8 id: 4975, mail: nil, telegraph: nil, times: nil, average: nil, guardian: nil, independent: nil, express: nil, date: nil, created_at: 2016-05-16 13:10:03 UTC, updated_at: 2016-05-16 13:10:03 UTC> [12] pry(main)> @ds.average => -3.4 [13] pry(main)> @ds.date =>"2015-09-02" [14] pry(main)> @ds.persisted? => true [15] pry(main)> DailyScore.last => #<DailyScore:0x000001086810d8 id: 4975, mail: nil, telegraph: nil, times: nil, average: nil, guardian: nil, independent: nil, express: nil, date: nil, created_at: 2016-05-16 13:10:03 UTC, updated_at: 2016-05-16 13:10:03 UTC> [16] pry(main)> DailyScore.last.average => nil |
号
这是怎么回事?为什么不能访问我的变量属性?记录是否被保存?
更新:在控制台中,如果我只是创建一个新对象,那么行为是相同的。我使用的是Padrino框架和PostgresDB。
1 2 3 4 5 6 | 2.0.0 :001 > ds = DailyScore.new(date:"2016-01-01") => #<DailyScore id: nil, mail: nil, telegraph: nil, times: nil, average: nil, guardian: nil, independent: nil, express: nil, date: nil, created_at: nil, updated_at: nil> 2.0.0 :002 > ds.date =>"2016-01-01" 2.0.0 :003 > ds => #<DailyScore id: nil, mail: nil, telegraph: nil, times: nil, average: nil, guardian: nil, independent: nil, express: nil, date: nil, created_at: nil, updated_at: nil> |
这是模型的问题吗?以下是原始迁移:
006_创建_daily_scores.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class CreateDailyScores < ActiveRecord::Migration def self.up create_table :daily_scores do |t| t.float :average t.datetime :date t.float :express t.float :independent t.float :guardian t.float :telegraph t.float :mail t.float :times t.timestamps end end def self.down drop_table :daily_scores end end |
。
现在已经添加了另一列day:date-使用:date而不是:datetime-来检查它是否是带有:datetime的怪癖,但行为是相同的。
这是因为您使用模型属性在模型中调用了
从您的模型中删除