我正在编写一个自定义的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 ....
答案 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