2011-05-16 90 views
4

Rails Admin工作正常,直到我安装了Devise_Invitable。现在,当我点击Rails Admin中的用户时,出现以下错误:设计Invitable Rails管理员冲突

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管理员?

的Gemfile

gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git' 

感谢您的任何想法。

回答

4

您向User模型添加has_many :invitees, :class_name => self.class.name, :as => :invited_by的答案可以使rails_admin正常工作,但是我需要。解决方法是将您添加到用户模型的行更改为:

has_many :invitees, :class_name => "User", :as => :invited_by 
+0

非常感谢你!这有助于编辑和删除。 – LennonR 2011-07-19 14:25:50

4

不幸的是,您得到的堆栈跟踪(以及那个GitHub问题中的堆栈跟踪)在rails_admin中非常常见 - 它实际上意味着无法自动发现关联。正如您发现的那样,该修复不适用于与devise_invitable的交互。

NoMethodError发生是因为devise_invitable gem(截至0.5.0)只声明invited_by关系的belongs_to的一半。 rails_admin无法完全理解这种部分声明的关系和barf。

我们能够加入到解决这个问题在我们的应用程序下面我们设计的模型:

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 

如果你不想跟踪邀请者/被邀请者的关系可言,你可以fork the devise_invitable gem和删除该功能。

+0

修复了它。谢谢! – LennonR 2011-06-15 16:15:03

+0

更新为使用'self.name'而不是'self.class.name'。由于'has_many'在类体中,'self.class.name'总是返回'Class',这不是我们想要的。每@CuriousYogurt。 – 2011-07-18 20:18:23