2

我几乎在所有模型中都使用了 ActiveAdmin 预加载。例如,这对我的 Coach 模型非常有用:

应用程序/管理员/coaches.rb

ActiveAdmin.register Coach do
  controller do
    def scoped_collection
      Coach.includes(:addresses, :user, :sport, {:user => :user_metric})
    end
  end
end

然而,当我最近用我的搜索模型(我用它来记录用户所做的搜索)尝试同样的事情时:

应用程序/管理员/searches.rb

ActiveAdmin.register Search do
  controller do
    def scoped_collection
      Search.includes(:sport)
    end
  end
end

当我尝试访问 /admin/searches 时出现以下错误

NoMethodError in Admin::SearchesController#index

undefined method `includes' for
ActiveAdmin::ResourceController::Collection::Search:Module

app/admin/searches.rb:5:in `scoped_collection'

我相信这里可能发生的事情是Search我在急切加载中使用的常量是指一些内部 ActiveAdmin 模块而不是我的 ActiveRecord 模型。有没有办法防止这种名称冲突?也许 ActiveRecord::Search (或类似的东西)?或者可能这里完全发生了其他事情?

该常量Search在站点上的其他任何地方都有效,并且 ActiveAdmin 搜索页面在尝试实现预加载之前运行良好。

4

1 回答 1

1

正如@Fivell 推荐的那样,尝试::Search代替Search. 看起来您对Searchin的引用app/admin/searches.rb:5实际上是在引用ActiveAdmin::ResourceController::Collection::Search.

如果这不能解决问题,并且可能不会,我建议将您的Search类重命名为其他名称,因为名称冲突往往会出现奇怪的错误......

祝你好运!

于 2013-03-16T02:23:18.133 回答