Rails - неопределенный метод `find' для nil:NilClass (ActiveAdmin)

Скажем, у меня есть 2 контроллера.

рекламодатель_кампания и рекламодатель_объявление.

Мне нужно, чтобы рекламодатель_ad был дочерним элементом рекламодателя_кампании, но, поскольку я новичок в активном администраторе (и в самом рубине), у меня возникают некоторые проблемы. Я пытаюсь сделать вложенный ресурс с помощью ActiveAdmin.

Код ниже действительно регистрирует необходимые маршруты

ActiveAdmin.register Advertiser::Ad do
  belongs_to :advertiser_campaign
end

НО, когда я пытаюсь получить доступ к /admin/advertiser_campaigns/1/advertiser_ads, я получаю сообщение об ошибке

NoMethodError in Admin::AdvertiserAdsController#index
undefined method `find' for nil:NilClass

Что, вероятно, означает, что маршруты работают достаточно хорошо, и проблема где-то в контроллере. Я попытался перезаписать контроллер ActiveAdmin, сделав что-то вроде этого

controller do
  def index
    index! do |format|
      @advertiser_ads = Advertiser::Ad.all
      format.html
    end
  end
end

Но абсолютно никакого эффекта. Хотя я вижу, что контроллер пытается выполнить мой перезаписанный контроллер, но сталкивается с той же ошибкой.

В моей модели adsr_campaign у меня есть

has_many :advertiser_ads, :class_name => 'Advertiser::Ad'

и в моей модели adsr_ad

belongs_to :advertiser_campaign, :class_name => 'Advertiser::Campaign'

Любая помощь по этому вопросу будет высоко оценена. Заранее спасибо.


person Vitali    schedule 16.05.2012    source источник


Ответы (1)


В документах говорится, что любой ресурс регистрируется в пространстве имен. Из вашего примера видно, что вы пытаетесь использовать класс Advertiser::Ad без явного указания пространства имен. Пытаться:

AdminAdmin::Advertiser::Ad

В любом случае, если это не поможет, используйте консоль rails (проверьте наличие зарегистрированных пространств имен/классов), чтобы быстрее выяснить причину проблемы.

person gmile    schedule 16.05.2012
comment
Согласно документам, которые вы мне прислали, пространство имен зарегистрировано следующим образом: namespace =› :namespacename, но на самом деле это мало что дает, кроме как ломает маршруты. В соответствии с этим пространство имен github.com/gregbell/active_admin/issues/78 не требуется. для создания вложенных ресурсов. - person Vitali; 16.05.2012
comment
Да, это не требуется. Дело в том, чтобы выяснить, какое пространство имен по умолчанию назначается - person gmile; 16.05.2012