Пользовательский контроллер RailsAdmin

Я пишу собственный контроллер rails_admin (Backend::ImagesController), который наследуется от RailsAdmin::MainController.

Я выполнил шаги в этом ответе, но я получаю ошибку undefined_method, когда мое представление использует помощник маршрута backend_image_path(@image).

Контроллер определяется в файле controllers/backend/images_controller.rb как:

module Backend
  class ImagesController < RailsAdmin::MainController
    #layout 'rails_admin/cropper'

    skip_before_filter :get_model
    skip_before_filter :get_object
    skip_before_filter :check_for_cancel

    .... the various actions ....

Мои маршруты определены как:

namespace 'backend' do
  resources :images do
    member do
      get :cropper
      post :crop
    end
  end
end

mount RailsAdmin::Engine => '/backend', :as => 'rails_admin'

И вывод рейк-маршрутов - это то, что я ожидаю:

backend_image GET  /backend/images/:id(.:format) backend/images#show {:protocol=>"https://"}

Наконец, из консоли рельсов:

app.backend_image_path(id: 10)
=> "/backend/images/10"

Этот контроллер работал безупречно, пока я не попытался интегрировать его в RA, расширив RailsAdmin::MainController.

Я не знаю, почему route_helper больше недоступен с контроллера....


person Cec    schedule 12.11.2013    source источник
comment
если вы планируете дополнительные настройки в будущем, активный администратор поможет.   -  person Amol Pujari    schedule 12.11.2013
comment
Я не собираюсь переходить на другой фреймворк, во всяком случае, я примерно понял, как это сделать. Завтра отвечу на свой вопрос.   -  person Cec    schedule 12.11.2013
comment
@Cec, ты не против ответить на этот вопрос?   -  person Dane O'Connor    schedule 12.06.2014
comment
@thedeeno Привет! поскольку я не могу ответить на свой вопрос, я отредактировал его, добавив решение внизу. Я надеюсь, что это поможет, ура!   -  person Cec    schedule 14.06.2014
comment
@thedeeno Было ли мое решение полезным для вас?   -  person Cec    schedule 25.08.2014
comment
@Cec Спасибо, что нашли время, чтобы обновить это. Я не работаю над этим проектом, но я обязательно загляну сюда, когда сотру пыль. +1   -  person Dane O'Connor    schedule 25.08.2014
comment
@thedeeno Рад это слышать :)   -  person Cec    schedule 26.08.2014


Ответы (1)


Вот решение, которое я нашел.

Моей ошибкой было пространство имен моего пользовательского контроллера: хотя механизм RA установлен на /backend, его пространство имен по-прежнему RailsAdmin.

Это означает, что для того, чтобы иметь собственный контроллер в моем бэкенде, я должен создать контроллер в пространстве имен RailsAdmin, таким образом

module RailsAdmin
   class ImagesController < RailsAdmin::MainController     

       # unless your controller follows MainController routes logic, which is 
       # unlikely, these filters will not work 

       skip_before_filter :get_model
       skip_before_filter :get_object
       skip_before_filter :check_for_cancel

       ....
   end
end

Контроллер определяется в controllers/rails_admin/images_controller.rb, а представления находятся в views/rails_admin/images/.

Маршрутизация

Наличие собственного контроллера RA подразумевает отрисовку новых маршрутов для самого движка, поэтому мой route.rb становится таким:

RailsAdmin::Engine.routes.draw do
   # here you can define routes for the engine in the same way you do for your app

   # your backend must be under HTTPS
   scope protocol: 'https://', constraints: {protocol: 'https://'} do
      resources :images
   end
end

MyApp::Application.routes.draw do
   # your application's routes
   .....
end

Чтобы получить доступ к новым маршрутам двигателя (например, ИНДЕКС изображений):

rails_admin.images_path

Важной вики-страницей RA для маршрутов является эта.

person Cec    schedule 25.08.2014
comment
спасибо за публикацию вашего ответа ... это действительно очень помогло ... но я получаю эту ошибку: ActionView::Template::Error (undefined method 'breadcrumb_parent' for nil:NilClass): это в этой строке: while action.breadcrumb_parent && (action = action(*action.breadcrumb_parent)) # rubocop:disable Loop - person VoidZero; 12.07.2016
comment
@VoidZero, во-первых, я запускаю это на RailsAdmin 0.7. Не знаю, смогу ли я чем-то помочь, но без более подробной информации точно не смогу. Я предлагаю вам указать свои версии RA и Rails и поместить трассировку стека вашей ошибки на pastebin.com. и киньте сюда ссылку. - person Cec; 12.07.2016