2015-12-08 2 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, ...> # !!! 

Почему мои изменения не сохраняются? Edit: 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, ...> #!!! 

Есть функция в Rails/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

использовать beebug gem и использовать, чтобы увидеть все обратные линии и любезно положить его здесь –

ответ

0

При вызове сохранить на объект ActiveRecord, кроме сохранения обратных вызовов (before_save, after_save), обновление обратного вызова также срабатывает. Просмотрите обновление (до & после) обратных вызовов, если они есть.

+0

Извините, похоже, что дело не в этом. См. Комментарии. – Sam

Смежные вопросы