使用 Rails 4.2.6,我有一个自定义范围的用户模型。这是我的模型/user.rb:
class User < ActiveRecord::Base
scope :active_customers, -> { patient.where.not(customer_id: nil) }
我正在尝试使用 Active Admin 显示所有 active_customers 的索引,这是我的 admin/customer.rb:
ActiveAdmin.register User, as: "Customer" do
menu priority: 8, label: proc{ I18n.t "admin.financial_report" }, parent: 'dev'
actions :index
controller do
def scoped_collection
User.active_customers
end
end
它在本地和暂存中工作,但在生产服务器中崩溃。
我已经为所有患者建立了一个索引,该索引在每个环境中都能完美运行。这是管理员/患者.rb:
ActiveAdmin.register User, as: "Patient" do
menu priority: 1, label: proc{ I18n.t "admin.users" }
permit_params [:nickname, :name, :surname, :email, :password, :password_confirmation, :therapist_id, :created_by_admin, :randword, :phone, :active]
actions :all, except: [:destroy]
controller do
def scoped_collection
User.patient
end
生产中的日志不显示 SQL 查询的任何跟踪,因为它似乎之前中断:
Started GET "admin/customers"
Processing by Admin::CustomersController#index
Completed 500 Internal Server Error
检查 rake 路由的结果后,我可以看到“管理员/客户”没有路由,但它在本地也没有中断,也没有登台服务器。关于为什么会发生的任何线索?
在我的 routes.rb 我有:
ActiveAdmin.routes(self)
在分期中,我们有:
User.patient.count => 397
Benchmark.realtime { User.patient } => 0.0014501959958579391
User.active_customers.count => 99
Benchmark.realtime { User.active_customers } => 0.0016011869884096086
在生产中:
User.patient.count => 27853
Benchmark.realtime { User.patient } => 0.007111124003131408
User.active_customers.count => 496
Benchmark.realtime { User.active_customers } => 0.0040691940012038685
因此,尽管环境之间的数字差异我不认为生产中内存错误的原因是用户数量。
还尝试在 customer.rb 中使用在 patient.rb 中工作的范围,但它崩溃了:
controller do
def scoped_collection
User.patient
end
之后我尝试将 as:"Customer" 更改为 as:"User" 并再次崩溃:
ActiveAdmin.register User, as: "User" do
如果在 patient.rb 中工作的范围在 customer.rb 中不起作用,这让我放弃了问题只是因为内存不足而引起的想法。很确定问题与我在活动管理员中使用范围的方式或我在 customer.rb 中的语法有关,但我不知道如何解决它。