Ruby on rails 未定义的方法`注释计数';有关RubyonRails指南中的文章
我不熟悉Rails。我按照Rails 5.1.4的要求建立了一个博客。我的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。做 你是说?评论 我错过了什么 问题
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 %>