代码之家  ›  专栏  ›  技术社区  ›  Jerome

Administrate gem不允许查看用户

  •  0
  • Jerome  · 技术社区  · 3 年前

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

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

    /admin/users/2579/edit
    

    但是调用同一对象的显示页面会返回错误

    undefined method `admin_role_path'
    

    指向第59行 app/views/admin/application/_collection.html.erb 由管理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 %> ,将等号转换为哈希值。 三个join(of has_many)类有一个 ActiveRecord_AssociationRelation 这不可理解地调用了收集表单。 <%= ressource.inspect %> 允许查看每个关系的详细信息。

    尽管如此,错误生成的机制对我来说仍然是不透明的,因为在存储库中找不到前面提到的路径。

    问题的根源是什么,如何管理?

    0 回复  |  直到 3 年前
        1
  •  1
  •   pablobm    3 年前

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

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

    错误显示 undefined method 'admin_role_path' 在我看来,这条路线 /admin/roles/:id 不存在。是这样吗?

    我只是看了一眼,然后自己重现了这个问题。这是Administrate中的一个错误。我们应该检查相关模型是否有“展示”路线。在这种情况下,没有,它失败了。

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

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

    推荐文章