Rails: данные не сохраняются с assign_attributes перед сохранением

Я делаю обновление в before_save, как показано ниже:

has_many :things

before_save :set_things

def set_things
  things = all_things.map do |t|
    t.assign_attributes(attrs) 
    t
  end
  self.things = things
end

Когда я сохраняю объект как t.save!, объекты имеют обновленные атрибуты, но после перезагрузки возвращаются к старому значению, поэтому обновление не сохраняется. Если я использую t.update_attributes, он работает нормально, но разве assign_attributes не должен сохраняться при сохранении? Почему не работает?


person Bhavya    schedule 23.06.2020    source источник
comment
Какую версию рельсов вы используете? В версиях до 5 возврат неверного значения из обратного вызова может отменить текущую выполняемую операцию (например, сохранение). Если вы используете версию ниже 5, попробуйте добавить true внизу обратного вызова.   -  person Syntactic Fructose    schedule 23.06.2020
comment
Assign_attributes должен сохраняться после сохранения. Внутри этого обратного вызова что-то происходит. Вы когда-нибудь пытались поместить постоянное значение в обратный вызов только для того, чтобы посмотреть, было ли оно сохранено? Что-то вроде удаления всего кода и добавления только self.things = [Thing.new()].   -  person Pedro Paiva    schedule 24.06.2020


Ответы (1)


Это было решено. Поскольку я обновлял существующую запись, assign_attribute не обновлял атрибуты. Только новая запись будет обновлена ​​в соответствии с этим: Rails: Почему collection=» не обновляет записи с существующим идентификатором?

person Bhavya    schedule 01.07.2020