值當我加載某些價值觀在我的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,沒有更新column1
或column2
。
這些列沒有默認值。從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
嘿你有沒有檢查列2的默認值?它可能是真的。 –
@VishalJAIN一個有效的問題,但沒有。我現在要更新這個問題來反映。 – Sam
使用byebug寶石,並使用看到所有的backtrace,並把它放在這裏 –