单表继承 活动管理模型映射问题 rails 4

Posted

技术标签:

【中文标题】单表继承 活动管理模型映射问题 rails 4【英文标题】:Single Table inheritance Active admin model mapping issue rails 4 【发布时间】:2017-01-04 17:13:49 【问题描述】:

我创建了一个具有单表继承的多用户这里是我的模型

# user.rb 

class User < ActiveRecord::Base
end

这是用户模型,所有其他模型都是从数据库中的用户继承的,它们是一种既存储用户类型又保存用户类型的模型

# customer.rb

class Customer < User
end

# space_owner.rb

class SpaceOwner < User
end

**当我将这些映射到active_admin rails 4 时,我会看到一个错误**

Showing /home/rabnawaz/.rvm/gems/ruby-2.3.1/bundler/gems/activeadmin-0a5a15b88bff/app/views/active_admin/resource/index.html.arb where line #2 raised:

undefined method `chain' for nil:NilClass
Extracted source (around line #709):
  def chain
    @chain ||= begin
      a = source_reflection.chain
      b = through_reflection.chain
      chain = a + b
      chain[0] = self # Use self so we don't lose the information from :source_type

这是我在创建 active_admin 文件以显示用户时遇到的错误

你能给我一个解决方案吗?

这是我用来创建多个用户的设计路线

devise_for :admin_users, ActiveAdmin::Devise.config
  ActiveAdmin.routes(self)

devise_for :customers, :controllers =>  
    :registrations=>"customers/registrations", 
    :passwords=>"customers/passwords"
  ,:skip => :sessions
  devise_for :space_owners, :controllers =>  
    :registrations=>"space_owners/registrations", 
    :passwords=>"space_owners/passwords"
  ,:skip => :sessions

【问题讨论】:

错误信息说 nil 类没有链方法,这可能意味着 source_reflection 或 through_reflection 之一在您调用链时没有定义。 谢谢我刚刚用了这个,问题解决了 config.filters = false @RabnawazJansherBadozai 禁用过滤器不是解决办法。尽管github.com/activeadmin/activeadmin/issues/3957 在此处报告了该错误 【参考方案1】:

引用https://github.com/activeadmin/activeadmin/issues/3957的答案:

经过一些研究,我发现当 active_record 无法自动推断嵌套的名称时会出现此错误 协会。处理此问题的解决方法可能是例如使用 through 嵌套关联。

您的问题也不清楚您是否确实向 ActiveAdmin 注册了 User 子类。

【讨论】:

以上是关于单表继承 活动管理模型映射问题 rails 4的主要内容,如果未能解决你的问题,请参考以下文章

具有活动管理员的 Rails 双嵌套表单

在 Rails 的单表继承中在哪里写关联?

使用单表继承时是不是可以在 Rails 3 中有动态 id 列

如何将活动记录类特定属性映射到rails中相应的通用关注方法

Rails“多重继承”模型-具有另一个类的属性的ActiveRecord对象?

如何在 Rails 中自定义活动管理视图?