【问题标题】:Devise Invitable Rails Admin conflict设计 Invitable Rails 管理员冲突
【发布时间】:2011-05-16 02:59:19
【问题描述】:

在我安装 Devise_Invitable 之前,Rails Admin 工作正常。现在,当我在 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'

感谢您的任何想法。

【问题讨论】:

    标签: ruby-on-rails-3 devise polymorphism


    【解决方案1】:

    has_many :invitees, :class_name => self.class.name, :as => :invited_by 添加到 User 模型的答案可以让 rails_admin 工作,但我 ran into problems deleting and editing。解决方案是将添加到 User 模型的行更改为:

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

    【讨论】:

    • 非常感谢!这使它可以编辑和删除。
    【解决方案2】:

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

    NoMethodError 发生是因为 devise_invitable gem(从 0.5.0 开始)只声明了 belongs_to 的一半 invited_by 关系。 rails_admin 无法完全理解这种部分声明的关系和错误。

    通过将以下内容添加到我们的设计模型中,我们能够在我们的应用中解决此问题:

    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 并删除该功能。

    【讨论】:

    • 更新为使用 self.name 而不是 self.class.name。由于has_many 在类体中,self.class.name 总是返回Class,这不是我们想要的。根据@CuriousYogurt。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2012-07-06
    相关资源
    最近更新 更多