管理 gem 不允许查看用户

Administrate gem does not allow to view user

A Rails 6.0 使用 gem administrate。标记为管理员的用户可以正确访问页面。

显示用户索引,例如可以访问编辑页面:

/admin/users/2579/edit

但是调用同一个对象的显示页面returns出错

undefined method `admin_role_path'

指向 app/views/admin/application/_collection.html.erb 的第 59 行,这是由管理员自动生成的 gem

<%= %(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 %>,将等号切换为散列。 三个连接(has_many)类 有一个 ActiveRecord_AssociationRelation 不可理解地调用集合表单。 <%= ressource.inspect %> 允许查看每个关系的详细信息。

错误生成的机制对我来说仍然是不透明的,因为在存储库中找不到上述路径。

问题的根源是什么,如何解决?

我认为您遗漏了一些重要信息。我认为您的 User 模型 has_many :roles 对吗?

您在“显示”页面中,Adminstrate 正在尝试呈现“集合”。看起来它正在尝试呈现用户的角色,这就是失败的地方。

错误显示 undefined method 'admin_role_path'。这向我表明路线 /admin/roles/:id 不存在。是这样吗?

刚刚看了下,自己复现了问题。这是管理中的错误。我们应该检查关联模型是否有“显示”路线。在这种情况下没有,它失败了。

解决方法是为角色提供路由:resources :roles。正确的解决方案是修复错误。

我刚刚为此在回购协议中提出了一个问题:https://github.com/thoughtbot/administrate/issues/1861