ActiveAdmin has_many through - nil的未定义方法`klass':NilClass

时间:2016-05-13 17:19:30

标签: ruby-on-rails activeadmin has-and-belongs-to-many

试图弄清楚为什么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

编辑:请阅读下面我之前的解释,否则我通过执行以下操作来解决此问题:

  • 我将联接表模型从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
    
  • 由于这不起作用,我四处寻找并运行调试器以查找错误。我发现我在场地中断了与关闭点的关系:

我有:

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:模型的搜索过滤器即可。对于这个用例,没有必要按此过滤我的信息,因此我只是删除了它。

[OLD]说明:我需要将多个Rps分配给某个Venue,并将许多Rps分配给某个Rp,所以我使用了一个由连接表支持的连接模型(venue_rp)来建模这些信息。

到目前为止一切顺利,它就像是在rails控制台上的魅力。

但是我需要为管理员用户提供CRUD数据表单,所以我采用了ActiveAdmin方式。所以我继续注册我的Venue模型:

ActiveAdmin.register Venue do

  scope_to :current_user, if: proc{ current_user.is_nightclubboss? }
  menu priority: 3

end

想法是superadmins将能够看到应用程序中的所有信息,而夜总会老板只会看到与他们有关的信息。

到目前为止一切顺利,我期待我会在场地中看到activeadmin的默认索引和表单(Sucursales在下面的屏幕截图中表示场地):

enter image description here

但是当我点击activeadmin菜单中的Venues条目时,我遇到了反思问题:

enter image description here

我试过的是重写关联,到目前为止没有骰子。我做错了吗?

1 个答案:

答案 0 :(得分:0)

我遇到了x-y问题。

问题与这个问题无关。