Попытка выяснить, почему ActiveAdmin ломается, ваша помощь приветствуется.ActiveAdmin has_many through - undefined метод `klass 'для nil: NilClass
EDIT: Оказывается, я столкнулся с ситуацией x-y problem. Я приношу свои извинения сообществу SO ...
Я предположил, что отношения были виновниками, но позже я узнал, что это еще одна проблема. Пожалуйста, смотрите ниже для обновленной версии этой проблемы:
Мои модели:
class Venue < ActiveRecord::Base
belongs_to :nightclub
has_one :nightclub_boss, through: :nightclub
belongs_to :rp_boss
has_many :memberships
has_many :rps, through: :memberships
belongs_to :captain
has_many :reservations
has_many :payments, through: :reservations
has_many :cutoffs
has_many :cutoff_payments, through: :cutoff
has_many :favorites
has_many :schedules
end
class Membership < ActiveRecord::Base
belongs_to :venue, dependent: :destroy
belongs_to :rp, dependent: :destroy
end
class Rp < User
has_many :memberships
has_many :venues, through: :memberships
has_many :nightclubs, through: :venues
has_many :nightclub_bosses, through: :nightclubs
has_many :rp_bosses, through: :venues
has_many :captains, through: :venues
has_many :reservations
has_many :payments, through: :reservations
end
EDIT: читайте ниже моего предыдущего объяснения, в противном случае я это исправил, выполнив следующие действия:
Я изменил модель таблицы соединений от
venue_rp
доmembership
. Это моя миграция:class CreateMemberships < ActiveRecord::Migration def change create_join_table :rps, :venues, table_name: :memberships do |t| t.index [:rp_id, :venue_id] t.index [:venue_id, :rp_id] end end end
Поскольку это не сработало, я ткнул и побежал отладчик, чтобы найти то, что было неправильно. Я обнаружил, что я испортил вверх отношения с отсечкой в Выставочных:
я имел:
has_many :cutoffs
has_many :cutoff_payments, through: :cutoff
Необходимо, чтобы сделать это множественное число:
has_many :cutoffs
has_many :cutoff_payments, through: :cutoff*s*
После того, что исключение ушел ,
В случае, если вы столкнулись с другой проблемой в activeadmin, такие как:
undefined method `memberships_id_eq' for Ransack::Search<class: Venue, base: Grouping <combinator: and>>:Ransack::Search
Просто удалите Ransack фильтр для модели membership
has_many through:
. Для этого случая использования нет необходимости фильтровать мою информацию, и поэтому я просто удалил его.
[OLD] Объяснение: Мне нужно назначить много Rps на определенное место, и множество мест для определенного Rp, поэтому я использовал модель соединения (venue_rp
), подкрепленную таблицей соединений, чтобы моделировать эту информацию.
Пока все хорошо, оно работает как шарм на консоли рельсов.
Однако мне нужно предоставить пользователям администратора формы с данными CRUD, поэтому я пошел по пути ActiveAdmin. Поэтому я иду вперед и зарегистрировать Venue модель:
ActiveAdmin.register Venue do
scope_to :current_user, if: proc{ current_user.is_nightclubboss? }
menu priority: 3
end
Идея заключается в том, что superadmins сможет увидеть всю информацию в приложении, и ночной клуб боссы будут видеть только информацию, которая касается их.
До сих пор так хорошо, я ожидал, что я буду видеть индекс по умолчанию и формы для activeadmin в местах (Sucursales означает залы в следующем скриншоте):
Но когда я нажимаю на входе в залы меню activeadmin бегаю в проблему отражения:
То, что я пытался это переписать ассоциации, ни кости до сих пор. Я что-то с ними делаю?
Только что увидел начальную проблему с этим при чтении. Ваша таблица соединений должна быть rps_venues, а не event_rp. Rails ожидает, что имена таблиц будут множественными и в лексическом порядке! – bkunzi01
Отлично, я пошел вперед и изменил эту связь, но я все равно столкнулся с той же проблемой. Оказывается, это была проблема с другой моделью в конце концов! Я улучшу свой вопрос, чтобы объяснить больше. –
Вопрос обновлен. Я отправлю решение, когда сообщение позволит мне. Спасибо @ bkunzi01 –