2

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

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

/admin/users/2579/edit

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

undefined method `admin_role_path'

指向app/views/admin/application/_collection.html.erb 由管理 gem 自动生成的第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 %>的 ,将等号切换为哈希。三个(has_many 的)连接类有一个ActiveRecord_AssociationRelation无法理解地调用集合表单的类。<%= ressource.inspect %> 允许查看每个关系的详细信息。

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

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

4

1 回答 1

1

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

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

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

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

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

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

于 2021-01-07T12:26:18.657 回答