Я пытаюсь получить доступ к отдельным элементам в ActiveRecord_Associations_CollectionProxy, просматривая его в действии уничтожения.
Чтобы лучше объяснить мою проблему, я поделюсь некоторым кодом.
Вот как выглядит мой код контроллера:
def destroy
@role.destroy
// Simple puts to show what data is here
puts @role # => <Role:0x000055850068acb0>
puts @role.rules.inspect # => <ActiveRecord::Associations::CollectionProxy []>
@role.rules.map do | rule |
puts rule # => doesn't output anything
SomeClass.new(@role.rules, rule.field, ...).call_function()
end
end
Вот как я назначаю роль:
def set_role
@role = current_company.roles.find_by_id!(params[:id])
end
Проблема в том, что цикл по правилам ролей, т.е. @role.rules.map
не работает, я предполагаю, что это потому, что дочерние элементы ролей уже удалены.
Ассоциация имеет предложение dependent: :destroy
.
Как мы видим, объект ActiveRecord::Associations::CollectionProxy []
пуст, поскольку все дочерние роли удаляются при удалении роли.
Как мне обеспечить захват роли и ее зависимых ассоциаций даже после удаления действия удаления? Я надеюсь это имеет смысл. Я попытался абстрагироваться и сделать это как можно проще. Извините, если код не имеет смысла, я объясняю это, не раскрывая много кода. Спасибо
EDIT
Я понимаю, что есть проблема с вопросом.
В игре есть еще один стол, Bundle
. Правило belongs_to
a bundle
и bundle
has_many. Поэтому, удалив роль, я хочу убедиться, что могу отправить сообщение об обновлении пакета с удалением правил.
NB SomeClass
- это библиотечный класс, внутри /lib
, который я использую для отправки событий. Это в основном означает, что я отправляю сообщение с подробной информацией о Bundle
. Это сообщение говорит нам, что когда роль была удалена, правила были удалены, и это bundle
без следующих правил.