RailsAdmin自定义控制器

时间:2013-11-12 08:41:41

标签: ruby-on-rails-3.2 rails-admin

我正在编写一个自定义的rails_admin控制器(Backend :: ImagesController),它继承自RailsAdmin :: MainController。

我按照in this answer步骤操作,但是当我的视图使用路径助手backend_image_path(@image)时,我收到了undefined_method错误。

控制器在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'

rake路线的输出是我所期望的:

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

最后,来自rails console:

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

这个控制器运行完美,直到我尝试通过扩展RailsAdmin :: MainController

将其集成到RA中

我不知道为什么无法再从控制器访问route_helper ....

1 个答案:

答案 0 :(得分:4)

这是我找到的解决方案。

我的错误是我的自定义控制器的命名空间:虽然RA引擎安装在 / backend 上,但其命名空间仍然是 RailsAdmin 。< / p>

这意味着要在我的后端拥有自定义控制器,我必须在名称空间 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控制器,意味着为引擎本身绘制新路由,因此我的routes.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

要访问新引擎路线(例如图像INDEX):

rails_admin.images_path

路线的重要RA维基页面为this one