Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未定义的方法`注释计数';有关RubyonRails指南中的文章_Ruby On Rails_Ruby_Activerecord_Rails Activerecord_Ruby On Rails 5.1 - Fatal编程技术网

Ruby on rails 未定义的方法`注释计数';有关RubyonRails指南中的文章

Ruby on rails 未定义的方法`注释计数';有关RubyonRails指南中的文章,ruby-on-rails,ruby,activerecord,rails-activerecord,ruby-on-rails-5.1,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,Ruby On Rails 5.1,我不熟悉Rails。我按照Rails 5.1.4的要求建立了一个博客。我的articles/index.html.erb模板文件如下所示: <% @articles.each do |article| %> <%= article.comments.count %></td> <% end %> 但当我重新加载浏览器时,会出现以下错误: #文章的未定义方法“注释计数”:0x007fb51fb001b8。做 你是说?评论 我错过了什么 问题

我不熟悉Rails。我按照Rails 5.1.4的要求建立了一个博客。我的
articles/index.html.erb
模板文件如下所示:

<% @articles.each do |article| %>
    <%= article.comments.count %></td>
<% end %>
但当我重新加载浏览器时,会出现以下错误:

#文章的未定义方法“注释计数”:0x007fb51fb001b8。做 你是说?评论


我错过了什么

问题是,当您添加特殊列时,调用
comments.size
实际上使用该列,而不是计算列数。您不必更改代码


看看这里:

问题是,当您添加特殊列时,调用
注释。size
实际上使用该列,而不是计算列数。您不必更改代码

看看这里:

这里的意思是,对于具有特定名称/模式的列,存在某些默认行为约定(如果需要,也可以更改/删除)

例如,当您创建记录时,将自动设置在列(如果存在!)处创建的
。或者,
type
列(同样,如果它存在!)将自动(除非您告诉它不要)被解释为在的上下文中使用

生成rails模型以创建新表时(
rails generate model person
),默认迁移文件包含行
t.timestamps
。这是可选的,但它告诉Rails包含以下列:
created\u at
updated\u at

但是,“默认情况下”不会创建其他列,例如
comments\u count
(因为为每个关联设置计数器缓存效率很低!)。为了使用此功能,需要在新迁移文件中显式创建列

您可以通过阅读
db/schema.rb
(当然,也可以直接连接到数据库!)来查看数据库的结构(包括
/
列中创建了
列中更新了
但没有
注释计数列)

有关如何实现计数器缓存的更多信息,请参阅。

此处的说明是,对于具有特定名称/模式的列,存在某些默认行为约定(如果需要,也可以更改/删除)

例如,当您创建记录时,将自动设置在
列(如果存在!)处创建的
。或者,
type
列(同样,如果它存在!)将自动(除非您告诉它不要)被解释为在的上下文中使用

生成rails模型以创建新表时(
rails generate model person
),默认迁移文件包含行
t.timestamps
。这是可选的,但它告诉Rails包含以下列:
created\u at
updated\u at

但是,“默认情况下”不会创建其他列,例如
comments\u count
(因为为每个关联设置计数器缓存效率很低!)。为了使用此功能,需要在新迁移文件中显式创建列

您可以通过阅读
db/schema.rb
(当然,也可以直接连接到数据库!)来查看数据库的结构(包括
/
列中创建了
列中更新了
但没有
注释计数列)


有关如何实现计数器缓存的详细信息,请参阅。

注释\u count
可能是一个“保留名称”(即具有特殊行为),但您仍然需要将该列添加到数据库架构中!!这不完全是魔术。参见。嗯。的第4.1.2.3节。但该列名与其他神奇可用的列一起列在指南中,如
处创建的列、
处更新的列等。“神奇可用”如中所示,它们是作为默认迁移的一部分创建的。。。您编写的创建表的每个数据库迁移大概都包含以下行:
t.timestamps
。这告诉rails在迁移过程中创建这些列。如果没有在迁移文件中写入
t.timestamps
,那么这些列也不会存在。如果您查看您的
db/schema.rb
(甚至直接连接到数据库!),您将看到这些列的存在。另一方面,
\u count
列不是默认创建的,因为为所有关联在任何地方生成计数器都是非常浪费和低效的。您应该仅在需要时(手动)创建它们,以提高性能。
注释\u计数
可能是一个“保留名称”(即具有特殊行为),但您仍然需要将该列添加到数据库架构中!!这不完全是魔术。参见。嗯。的第4.1.2.3节。但该列名与其他神奇可用的列一起列在指南中,如
处创建的列、
处更新的列等。“神奇可用”如中所示,它们是作为默认迁移的一部分创建的。。。您编写的创建表的每个数据库迁移大概都包含以下行:
t.timestamps
。这告诉rails在迁移过程中创建这些列。如果没有在迁移文件中写入
t.timestamps
,那么这些列也不会存在。如果您查看您的
db/schema.rb
(甚至直接连接到数据库!),您将看到这些列的存在。另一方面,
\u count
列不是默认创建的,因为为所有关联在任何地方生成计数器都是非常浪费和低效的。为了提高性能,您应该仅在需要时(手动)创建它们。
<% @articles.each do |article| %>
    <%= article.comments_count %></td>
<% end %>