instance.attribute_name 和 instance[:attribute_name] 对于 sequel 模型属性(数据库列)是否完全相同?

Is instance.attribute_name and instance[:attribute_name] exactly the same for sequel model attribute (db column)?

我使用 Rails 5.1.4,Sequel 5.9.0,Postgre,rack-mini-profiler(最新),sequel-rails 1.0。 1.

我想弄清楚为什么我的应用程序运行缓慢。这是我的发现。

我使用

进行了简单查询以获取帖子
@posts = Post.all

得到了~150。

我有一部分要渲染它。这是简化的:

<% @posts.each do |post| %>
  <%= post.title %>
  <%= post.body %>
<% end %>

当我查看 rack-mini-profiler 的日志时,我看到了

SELECT NULL; 

请求会减慢渲染速度,但如果我将 . 方法更改为 :[]

<% @posts.each do |post| %>
  <%= post[:title] %>
  <%= post[:body] %>
<% end %>

NULL 查询消失,渲染变得更快。 (titlebody 都是我数据库中的字段,没有别的。)

为什么?关于 Sequel,这就是我需要了解的吗?在这种情况下,我以后不应该使用 instance.method,还是我遗漏了什么?

当我从控制台尝试请求时,我得到:

> Post.first
D, [2018-06-09T22:46:41.277269 #96772] DEBUG -- : (0.001008s) SELECT NULL
D, [2018-06-09T22:46:41.277952 #96772] DEBUG -- : (0.000362s) SELECT * FROM "posts" LIMIT 1

第一个幻象请求是什么?如何调试和删除它?

终于找到问题了:

这是一个 :connection_validator plugin

绕过这个插件,除非你真的非常需要它!