#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.