无法更改ActiveRecord中的值

时间:2015-12-08 11:20:54

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

当我在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更新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, ...> #!!!

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

1 个答案:

答案 0 :(得分:0)

当您在ActiveRecord对象上调用save时,除了保存回调(before_save,after_save)之外,还会触发更新回调。如果有的话,请查看更新(之前和之后)回调。