【问题标题】:RailsAdmin Custom ControllerRailsAdmin 自定义控制器
【发布时间】:2013-11-12 08:41:40
【问题描述】:

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

我按照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 控制台:

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

这个控制器工作完美,直到我尝试通过扩展 RailsAdmin::MainController 将它集成到 RA 中

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

【问题讨论】:

  • 如果您计划将来进行更多自定义,activeadmin 会有所帮助。
  • 我不考虑切换到另一个框架,反正我几乎想出了如何做到这一点。明天我会回答我自己的问题。
  • @Cec 你介意回答这个问题吗?
  • @thedeeno 嗨!由于我无法回答我的问题,因此我对其进行了编辑以将解决方案包含在底部。希望对你有帮助,干杯!
  • @Cec 感谢您花时间更新此内容。我没有在这个项目上工作,但是当我把它掸掉时,我一定会回来看看。 +1

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


【解决方案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 控制器,意味着为引擎本身绘制新的路由,因此我的 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

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

rails_admin.images_path

一个重要的 RA wiki 页面是 this one

【讨论】:

  • 感谢您发布您的答案...它确实有很大帮助...但我收到此错误:ActionView::Template::Error (undefined method 'breadcrumb_parent' for nil:NilClass): 它在这条线上:while action.breadcrumb_parent &amp;&amp; (action = action(*action.breadcrumb_parent)) # rubocop:disable Loop
  • @VoidZero 首先,我在 RailsAdmin 0.7 上运行它。我不知道我是否可以提供帮助,但如果没有更好的信息,我将无法确定。我建议您指定您的 RA 和 Rails 版本,并将错误的堆栈跟踪放在 pastebin.com 上并在此处发布链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
相关资源
最近更新 更多