ActiveAdmin has_many 通过 - nil:NilClass 的未定义方法“klass”
ActiveAdmin has_many through - undefined method `klass' for nil:NilClass
试图弄清楚为什么 ActiveAdmin 对我不利,感谢您的帮助。
编辑:结果我 运行 自己陷入了 x-y problem 的境地。我向 SO 社区道歉...
我认为 has_many :venue_rps
关系是罪魁祸首,但后来我发现这是另一个问题。请在下面查看此问题的更新版本:
我的模特:
class Venue < ActiveRecord::Base
belongs_to :nightclub
has_one :nightclub_boss, through: :nightclub
belongs_to :rp_boss
has_many :memberships
has_many :rps, through: :memberships
belongs_to :captain
has_many :reservations
has_many :payments, through: :reservations
has_many :cutoffs
has_many :cutoff_payments, through: :cutoff
has_many :favorites
has_many :schedules
end
class Membership < ActiveRecord::Base
belongs_to :venue, dependent: :destroy
belongs_to :rp, dependent: :destroy
end
class Rp < User
has_many :memberships
has_many :venues, through: :memberships
has_many :nightclubs, through: :venues
has_many :nightclub_bosses, through: :nightclubs
has_many :rp_bosses, through: :venues
has_many :captains, through: :venues
has_many :reservations
has_many :payments, through: :reservations
end
编辑:阅读下面我之前的解释,否则我通过执行以下操作解决了这个问题:
我将连接 table 模型从 venue_rp
更改为 membership
。这是我的迁移:
class CreateMemberships < ActiveRecord::Migration
def change
create_join_table :rps, :venues, table_name: :memberships do |t|
t.index [:rp_id, :venue_id]
t.index [:venue_id, :rp_id]
end
end
end
因为这不起作用,我四处寻找并 运行 一个调试器来找出问题所在。我发现我在 Venues 中搞砸了与 cutoff 的关系:
我有:
has_many :cutoffs
has_many :cutoff_payments, through: :cutoff
需要将其设为复数:
has_many :cutoffs
has_many :cutoff_payments, through: :cutoff*s*
在那之后异常就消失了。
万一您 运行 在 activeadmin 中遇到另一个问题,例如:
undefined method `memberships_id_eq' for Ransack::Search<class: Venue, base: Grouping <combinator: and>>:Ransack::Search
只需删除 membership
has_many through:
模型的 运行sack 过滤器。对于这个用例,没有必要通过它来过滤我的信息,因此我只是删除了它。
[OLD] 解释:我需要将许多 Rps 分配给某个 Venue,并将许多 venue 分配给某个 Rp,所以我使用了一个由 join [=76= 支持的 join 模型(venue_rp
) ] 来模拟此信息。
到目前为止一切顺利,它在 rails 控制台上运行得非常棒。
但是我需要为管理员用户提供 CRUD 数据的表单,所以我采用了 ActiveAdmin 方式。所以我继续注册我的 Venue 模型:
ActiveAdmin.register Venue do
scope_to :current_user, if: proc{ current_user.is_nightclubboss? }
menu priority: 3
end
想法是超级管理员将能够看到应用程序中的所有信息,而夜总会老板只会看到与他们有关的信息。
到目前为止一切顺利,我期待我会在 venues 中看到 activeadmin 的默认索引和表单(Sucursales 在以下屏幕截图中表示 Venues):
但是当我点击 activeadmin 菜单中的 Venues 条目时,我 运行 进入反射问题:
我试过的是重写关联,到目前为止还没有成功。我是不是做错了什么?
我 运行 遇到这种情况的 x-y 问题。
问题与问题无关。
试图弄清楚为什么 ActiveAdmin 对我不利,感谢您的帮助。
编辑:结果我 运行 自己陷入了 x-y problem 的境地。我向 SO 社区道歉...
我认为 has_many :venue_rps
关系是罪魁祸首,但后来我发现这是另一个问题。请在下面查看此问题的更新版本:
我的模特:
class Venue < ActiveRecord::Base
belongs_to :nightclub
has_one :nightclub_boss, through: :nightclub
belongs_to :rp_boss
has_many :memberships
has_many :rps, through: :memberships
belongs_to :captain
has_many :reservations
has_many :payments, through: :reservations
has_many :cutoffs
has_many :cutoff_payments, through: :cutoff
has_many :favorites
has_many :schedules
end
class Membership < ActiveRecord::Base
belongs_to :venue, dependent: :destroy
belongs_to :rp, dependent: :destroy
end
class Rp < User
has_many :memberships
has_many :venues, through: :memberships
has_many :nightclubs, through: :venues
has_many :nightclub_bosses, through: :nightclubs
has_many :rp_bosses, through: :venues
has_many :captains, through: :venues
has_many :reservations
has_many :payments, through: :reservations
end
编辑:阅读下面我之前的解释,否则我通过执行以下操作解决了这个问题:
我将连接 table 模型从
venue_rp
更改为membership
。这是我的迁移:class CreateMemberships < ActiveRecord::Migration def change create_join_table :rps, :venues, table_name: :memberships do |t| t.index [:rp_id, :venue_id] t.index [:venue_id, :rp_id] end end end
因为这不起作用,我四处寻找并 运行 一个调试器来找出问题所在。我发现我在 Venues 中搞砸了与 cutoff 的关系:
我有:
has_many :cutoffs
has_many :cutoff_payments, through: :cutoff
需要将其设为复数:
has_many :cutoffs
has_many :cutoff_payments, through: :cutoff*s*
在那之后异常就消失了。
万一您 运行 在 activeadmin 中遇到另一个问题,例如:
undefined method `memberships_id_eq' for Ransack::Search<class: Venue, base: Grouping <combinator: and>>:Ransack::Search
只需删除 membership
has_many through:
模型的 运行sack 过滤器。对于这个用例,没有必要通过它来过滤我的信息,因此我只是删除了它。
[OLD] 解释:我需要将许多 Rps 分配给某个 Venue,并将许多 venue 分配给某个 Rp,所以我使用了一个由 join [=76= 支持的 join 模型(venue_rp
) ] 来模拟此信息。
到目前为止一切顺利,它在 rails 控制台上运行得非常棒。
但是我需要为管理员用户提供 CRUD 数据的表单,所以我采用了 ActiveAdmin 方式。所以我继续注册我的 Venue 模型:
ActiveAdmin.register Venue do
scope_to :current_user, if: proc{ current_user.is_nightclubboss? }
menu priority: 3
end
想法是超级管理员将能够看到应用程序中的所有信息,而夜总会老板只会看到与他们有关的信息。
到目前为止一切顺利,我期待我会在 venues 中看到 activeadmin 的默认索引和表单(Sucursales 在以下屏幕截图中表示 Venues):
但是当我点击 activeadmin 菜单中的 Venues 条目时,我 运行 进入反射问题:
我试过的是重写关联,到目前为止还没有成功。我是不是做错了什么?
我 运行 遇到这种情况的 x-y 问题。
问题与问题无关。