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 /内存增加.
非常感谢
我终于知道出了什么问题了!
在 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执行任何操作,并正确显示“未定义变量‘用户’”错误。
谢谢,你真的帮助了我
| 归档时间: |
|
| 查看次数: |
536 次 |
| 最近记录: |