当我在Rails数据库中加载一些值并更改它们的值时,
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 #show页面还原值!
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和none更新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, ...> #!!!
Rails / ActiveRecord中是否有一个函数要求:&#39;加载它后会发生什么事情?&#39; (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 :(得分:0)
当您在ActiveRecord对象上调用save时,除了保存回调(before_save,after_save)之外,还会触发更新回调。如果有的话,请查看更新(之前和之后)回调。