【问题标题】:Administrate gem does not allow to view user管理 gem 不允许查看用户
【发布时间】:2021-04-08 19:06:34
【问题描述】:

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

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

/admin/users/2579/edit

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

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"]>

我删除了所有代码并将其替换为简单的&lt;%= ressource %&gt;,将等号切换为哈希。 三个(has_many 的)连接类有一个ActiveRecord_AssociationRelation,它无法理解地调用集合表单。 &lt;%= ressource.inspect %&gt; 允许查看每个关系的详细信息。

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

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

【问题讨论】:

    标签: ruby-on-rails administrate rails-administrate


    【解决方案1】:

    我认为您遗漏了一些重要信息。我认为您的User 模型has_many :roles 是否正确?

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

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

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

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

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

    【讨论】:

    • 你是对的,但情况有点复杂。 User 类有一个布尔属性admin 用于处理管理;它是一个布尔值,因为这是一个打开/关闭的情况。但是,您是对的,有一个has_many :roles, through: :userroles 的角色类。我确实在 namespace :admin# resources :roles 中注释掉,以避免在管理列中列出(视觉负担)。
    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    相关资源
    最近更新 更多