2015-12-08 38 views
0

值當我加載某些價值觀在我的Rails數據庫,並改變他們的價值,無法改變的ActiveRecord

x = MyModel.find(123) 
# => #<MyModel id: 123, column1: 0, column2: true, ...> 
x.column1 = nil # => nil 
x.column2 = nil # => nil 
x.save! # => true 
# byebug output from my after_save callback which can modify these values 
[117, 120] in /home/sam/mina-NQA/releases/23/app/models/publisher.rb 
    117: 
    118: def set_recommendation 
    119:  byebug 
=> 120:  return nil if self.column1 
x = MyModel.find(123) 
# => #<MyModel id: 123, column1: nil, column2: nil, ...> 

重新載入相同的值或查看爲MyModel#顯示頁面還原值!

x = MyModel.find(123) 
# => #<MyModel id: 123, column1: 0, column2: true, ...> # !!! 

爲什麼我的更改不會持續?編輯:byebug顯示我的更改沒有應用,這不是持久性。爲什麼我的更改不適用?


我確實有一個after_save回調after_save :set_column1。但我確信它不會引起我的問​​題,因爲它包含一條線,如return nil unless self.column2。我確實有一個before_save :create_sub_model,它只創建嵌套模型。我確實有過濾器,但沒有影響MyModel#show,沒有更新column1column2

這些列沒有默認值。從db/schema.rb

t.integer "column1", limit: 4 
t.boolean "column2", limit: 1 

我也試過,不保存更新列:

x = MyModel.find(123) 
# => #<MyModel id: 123, column1: 0, column2: true, ...> 
x.update_column(:column1, nil) # => true 
x.update_column(:column2, nil) # => true 
x = MyModel.find(123) 
# => #<MyModel id: 123, column1: nil, column2: nil, ...> 
x = MyModel.find(123) 
# => #<MyModel id: 123, column1: 0, column2: true, ...> #!!! 

是否有軌道/ ActiveRecord的一個函數來問:「什麼是所有發生的事情加載這個?' (有一個在我production.log沒有這樣的信息。)


ruby -v # => ruby 2.0.0p353 (2013-11-22 revision 43784) [i686-linux] 
rails -v # => Rails 4.2.1 
mysql # => Server version: 5.1.73 Source distribution 
+0

嘿你有沒有檢查列2的默認值?它可能是真的。 –

+0

@VishalJAIN一個有效的問題,但沒有。我現在要更新這個問題來反映。 – Sam

+1

使用byebug寶石,並使用看到所有的backtrace,並把它放在這裏 –

回答

0

當你調用保存一個ActiveRecord對象上,除保存回調(before_save,after_save的),更新回調也引發其他。請仔細查看更新(之前的&之前)回調(如果有)。

+0

對不起,看起來不是這樣。請參閱評論。 – Sam