Rails 6.0使用gemadministrate
。被标记为管理员的用户可以正确访问页面。
显示用户索引,例如,可以访问编辑页面:
/admin/users/2579/edit
但是调用同一对象的显示页面会返回错误
undefined method `admin_role_path'
指向由管理员gem 自动生成的CCD_ 2的第59行
<%= %(tabindex=0 role=link data-url=#{polymorphic_path([namespace, resource])}) %>
Trace of template inclusion: #<ActionView::Template /.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/administrate-0.14.0/app/views/fields/has_many/_show.html.erb locals=["field", "page"]>, #<ActionView::Template app/views/admin/application/show.html.erb locals=["page"]>
我删除了所有的代码,并用一个简单的<%= ressource %>
替换它,将等号切换为散列。三个join(of has_many(类有一个ActiveRecord_AssociationRelation
,它意外地调用了集合表单。<%= ressource.inspect %>
允许查看每个关系的详细信息。
尽管如此,错误生成的机制对我来说是不透明的,因为在存储库中找不到上述路径。
问题的根源是什么?如何管理?
我认为您遗漏了一些重要信息。我认为你们的User
型号has_many :roles
是对的吗?
你在";显示";页面,并且Administrate正试图呈现";集合";。看起来它试图呈现用户的角色,但这就是失败的地方。
错误显示undefined method 'admin_role_path'
。这向我表明/admin/roles/:id
路线并不存在。是这样吗?
我只是看了一眼,然后自己重现了这个问题。这是Administrate中的一个错误。我们应该检查是否存在";显示";关联模型的路线。在这种情况下没有,它失败了。
解决方法是为角色提供一个路由:resources :roles
。正确的解决方案是修复这个错误。
我刚刚在回购中为此提交了一个问题:https://github.com/thoughtbot/administrate/issues/1861