#ruby-on-rails #rails-activerecord #model-associations
#ruby-on-rails #rails-activerecord #модель-ассоциации
Вопрос:
в registration.rb
class Registration < ActiveRecord::Base
......
has_many :cash_transactions
after_destroy :destroy_cash_transaction
def first_cash_transaction
self.cash_transactions.first
end
def destroy_cash_transaction
if first_cash_transaction.registrations.count == 0
self.cash_transactions.find(first_cash_transaction).destroy
end
end
в cashtransaction.rb
class CashTransaction< ActiveRecord::Base
......
has_many :registrations
итак, когда я удаляю регистрацию, она уничтожит_cash_transaction, связанную с регистрацией.
В консоли rails я попытался:
Registration.find(some_id).cash_transactions
Консоль возвращает некоторые записи
Однако, когда я попытался удалить регистрацию, она вызовет destroy_cash_transaction, который вызовет first_cash_transaction, который возвращает пустые записи.
Кто-нибудь может мне помочь с этим? Большое вам спасибо.
——обновлено——
в контроллере участника
def destroy
if @registration.destroy
respond_to do |format|
format.html {redirect_to admin_events_participants_path, :notice => "#{@registration.email}'s registration has been deleted."}
end
else
respond_to do |format|
format.html {
flash[:warning] = print_out_message('form-destroy','registration')
redirect_to admin_events_participants_path
}
end
end
def load_registration
@registration = @event.registrations.find(params[:registration_id])
end
Комментарии:
1. Вы пытаетесь получить
first_cash_transaction
то жеRegistration
самое, что вы подтвердили, что у вас есть транзакция в консоли? Можете ли вы опубликовать, где и как вы вызываетеfirst_cash_transcation
метод?2. Опять же, вы не показываете, где вы это используете
destroy_cash_transaction
, и это меня немного смущает. И я думаю, что вы создалиfirst_cash_transaction
метод экземпляра модели as, поэтому его следует использовать для такого объекта, как@registration.first_cash_transaction
.3. функция destroy_cash_transaction находится в registration.rb. first_cash_transaction также является методом в registration.rb. Поэтому, когда я уничтожаю регистрацию, она вызывает destroy_cash_transaction, которая вызывает first_cash_transaction
4. когда вы уничтожаете регистрацию, как она будет вызываться
destroy_cash_transaction
? Вы написали что-нибудь для этого, потому что я не уверен, что rails автоматически предоставляет какую-либо такую функцию, или я что-то упускаю.5. это потому, что в модели регистрации я установил after_destroy:destroy_cash_transaction