2012-05-16 5 views
0

Скажем, у меня есть 2 контроллера.Rails - неопределенный метод `find 'for nil: NilClass (ActiveAdmin)

advertiser_campaign и advertiser_ad.

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

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

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

НО когда я пытаюсь получить доступ к/администратора/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 

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

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

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

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

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

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

ответ

1

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

AdminAdmin::Advertiser::Ad 

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

+0

Согласно документам, которые вы мне прислали, пространство имен зарегистрировано следующим образом:: namespace =>: namespacename ", но это действительно не делает ничего, кроме разрыва маршрутов. В соответствии с этим пространство имен https://github.com/gregbell/active_admin/issues/78 не требуется для создания вложенных ресурсов. – Screatch

+0

Да, это не требуется. Дело в том, чтобы выяснить, какое пространство имен по умолчанию назначено – gmile

Смежные вопросы