Rails Admin在我安装Devise_Invitable之前工作正常。 现在,当我在Rails Admin中单击用户时,我收到以下错误:
NoMethodError in RailsAdmin::MainsController#list
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map
其他模型工作正常。
我有一种预感,这可能是麻烦的一部分:
https://github.com/sferik/rails_admin/issues/370
因为这是devise_invitable的一部分
belongs_to :invited_by, :polymorphic => true
它说问题已解决,但是有什么办法我没有最新的rails管理员吗?
宝石文件
gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git'
感谢您的任何想法。
用户模型添加has_many :invitees, :class_name => self.class.name, :as => :invited_by
的答案可以使rails_admin正常工作,但我在删除和编辑时遇到了问题。 解决方案是将添加到用户模型的行更改为:
has_many :invitees, :class_name => "User", :as => :invited_by
不幸的是,您获得的堆栈跟踪(以及 GitHub 问题中的堆栈跟踪)在rails_admin中非常常见——它的真正含义是无法自动发现关联。如您所发现的,该修复不适用于与devise_invitable的交互。
发生NoMethodError
是因为 devise_invitable gem(截至 0.5.0)仅声明invited_by
关系的belongs_to
一半。 rails_admin无法完全理解这种部分声明的关系和barfs。
通过向 Devise 模型添加以下内容,我们能够在我们的应用程序中解决此问题:
class User < ActiveRecord::Base
# Create an explicit User.invitees => [User, User, …] relationship
# so that rails_admin can correctly discover this relationship.
has_many :invitees, :class_name => self.name, :as => :invited_by
…
end
如果您根本不打算跟踪邀请者/被邀请者的关系,则可以分叉devise_invitable gem 并删除该功能。