ActiveAdmin"无限循环":没有错误消息,CPU和内存使用量增加,强制终止并重启服务器

bon*_*rtr 5 ruby ruby-on-rails activeadmin

我在ActiveAdmin中遇到了这个问题.有时,当我访问一个页面,我想,一个未定义的变量,服务器启动一种"无限循环",不显示错误消息,并增加CPU和内存使用量,直到我必须杀死它.

这是一个例子:

我有一个Answers表,这是answers.rb中的一段代码:

show :title => proc { answer.id } do
  panel 'Answer' do
    .
    .
  end
  .
  .
end
Run Code Online (Sandbox Code Playgroud)

这段代码不起作用并显示错误:"未定义的局部变量或方法'回答'"

我得写

show :title => proc { @answer.id } do
Run Code Online (Sandbox Code Playgroud)

解决这个问题.

但是我有一个Users表,这是users.rb中的一段代码:

show :title => proc{ @user.name } do
  panel 'User details' do
    .
    .
  end
  .
  .
end
Run Code Online (Sandbox Code Playgroud)

如果我写

show :title => proc{ user.name } do
Run Code Online (Sandbox Code Playgroud)

我得到上面详述的问题,没有错误消息和CPU和内存使用量增加.

我真的不想知道为什么这两段代码之间存在不同的行为,我想知道如何在这种情况下显示错误消息而不是没有错误和cpu /内存增加.

非常感谢

bon*_*rtr 0

我终于知道出了什么问题了!

在 User show 上,a SELECT * FROM users执行了请求,尝试创建超过 300 000 个活动记录对象,防止服务器显示“未定义变量错误”并导致 CPU 和内存使用量增加。

对于答案显示上的相同错误,我认为SELECT * FROM answers已执行请求但错误显示正确,因为答案表的记录要少得多。然而检查后发现错误,没有执行SELECT * 请求。

然后我检查了answers.rb和users.rb之间的差异,并在users.rb中发现了这一点:

ActiveAdmin.register User do

  scope_to :association_method => :scoped do
    User.includes([:current_device => [:current_device_config, :current_push_config],:current_web_device => [:current_device_config, :current_push_config]])
  end
Run Code Online (Sandbox Code Playgroud)

检查 Active Admin 文档后,我意识到它不正确。

我把它移到:

controller do
  def scoped_collection
    User.includes([:current_device => [:current_device_config, :current_push_config], :current_web_device => [:current_device_config, :current_push_config]])
  end
Run Code Online (Sandbox Code Playgroud)

现在,不SELECT * FROM users执行任何操作,并正确显示“未定义变量‘用户’”错误。

谢谢,你真的帮助了我