Записи ассоциации Ruby on rails возвращают пустые, но в консоли rails они что-то возвращают

#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