ruby '2.2.1'
rails '4.2.0'
activeadmin : 1.0.0.pre1
arbre : 1.0.3 (之所以提到它是因为它似乎与我的问题有关)
我们升级到了rails 4.2,也不得不升级activeadmin(从0.5)。经过一些调整(特别是授权系统),一切似乎都很好,除了一个大问题:我只能访问索引页面。当访问带有ID的页面时(例如:"http://localhost:3000/admin/companies/2968"),我会收到此错误:
No route matches {:action=>"edit", :controller=>"admin/companies", :format=>nil, :id=> #{User id: nil, [all user attributes with nil value]}}. Missing required keys: [:id]
看起来param[:id]被某种方式改成了一个空的用户,这当然会导致它出现问题。
以下是我所知道的:
在我的ApplicationController顶部放置binding.pry并检查参数时,我得到{:action=>"edit", :controller=>"admin/companies", :format=>nil, :id=>2968}(因此这里没有问题)
引发错误的行是:
active_admin/resource/show.html.arb
-> arbre/element/builder_method.rb#insert_tag
-> arbre/element/builder_method.rb#build_tag
-> actionpack/actiondispatch/journey/formatter#generate(当调用此方法时,path_parameters ID值已经损坏,导致错误)
请问为什么我的ID参数没有被正确解释/我应该在哪里进一步查看?
编辑 >> 我在我的routes.rb中有这个
ActiveAdmin.routes(self)
devise_for :admin_users, ActiveAdmin::Devise.config
在 rake routes 中,生成的路由看起来很好(在这个特定的例子中,我有 admin/companies#edit admin_company GET /admin/companies/:id(.:format))。
编辑2 >> 以防不清楚,所有展示页面都会发生这种情况。 例如,如果我去 http://localhost:3000/admin/projects/,它可以正常工作,但是 http://localhost:3000/admin/projects/23815 也会给我一个空用户 id。
app/admin/company.rb
文件添加到您的问题中。 - scarver2config/initializers/active_admin.rb
重命名为config/initializers/active_admin.rb.off
并重新运行 ActiveAdmin 的安装程序bundle exec rails g active_admin:install
,以查看是否解决了问题。确保ActiveAdmin.routes(self)
在您的routes.rb
文件中。此外,请从 Rails 控制台确保 Company<->User 关联按照错误消息所示正常工作。 - scarver2