ActiveRecord ::RecordNotSaved: не удалось сохранить новый связанный баланс

#ruby-on-rails

#ruby-on-rails

Вопрос:

Для меня нет ничего ужасно очевидного относительно того, почему этот код не работает. Это выдает ошибку при .new вызове метода в одной из моих моделей ( Balance ).

В модели вообще нет обратных вызовов ActiveRecord Balance .

seeds.rb :

 client = Client.create! name: "XYZ Client"
client.create_related_records # line 29
  
     def create_related_records
        self.balance = Balance.new # fails here (line 13)
        self.balance.create_related_records
        self.balance.save!
    end
  
 ActiveRecord::RecordNotSaved: Failed to save the new associated balance.
/home/blaine/my_rails_app/app/models/client.rb:13:in `create_related_records'
/home/blaine/my_rails_app/db/seeds.rb:29:in `<main>'
  

Что, черт возьми, это значит? Почему .new попытка сохранить что-либо? Я думал, что он не должен был пытаться что-либо сохранить?

Комментарии:

1. У меня такая же проблема. Вы решили это?

Ответ №1:

Вы пытались передать balance = Balance.new свою консоль? Что это вам дает?

Что-то вроде #<Balance id: nil, client_id: nil, created_at: nil, updated_at: nil> ?

Таким образом, вы просто инициализируете запись баланса, но не создаете ее.

Это не то, для чего seeds.rb используются…

И теперь вы пытаетесь create_related_records для a balance , который был инициализирован, но не сохранен.

Вы хотите создать баланс

 def create_related_records
    self.balance.create(amount: 0, account: "debit") # or whatever columns you have there
    self.balance.create_related_records
    self.balance.save!
end
  

Ответ №2:

Кажется, в тот момент, когда вы назначаете что-то в качестве связанного экземпляра, оно пытается его сохранить.

например self.balance = Balance.new # performs a save on assignment

но вместо этого я сделал:

 balance = Balance.new
balance.blah = 'foo'
balance.save!
self.balance = balance # automatic save seems to occur here, this time it's valid and built already before doing the assignment.