Ruby on rails count和.分别给出不同数量的结果

Ruby on rails count和.分别给出不同数量的结果,ruby-on-rails,Ruby On Rails,我正在本地使用一个简单的rails应用程序进行学习 在我看来,我有以下代码 Reviews (<%= @reviews.count %>) <% if @reviews.any? %> <% @reviews.each do |review| %> This is one review <br /> <% end %> <% end %> class PlacesCo

我正在本地使用一个简单的rails应用程序进行学习

在我看来,我有以下代码

  Reviews (<%= @reviews.count %>)
  <% if @reviews.any? %>
      <% @reviews.each do |review| %>
          This is one review <br />
      <% end %>
  <% end %>
class PlacesController < ApplicationController
  def show
    @place = Place.find(params[:id])
    @reviews = @place.reviews
    @title = @place.name
  end
end
Reviews()
这是一篇评论
尽管这看起来很简单,但输出如下:

审查(2)

这是一篇评论

这是一篇评论

这是一篇评论

这似乎与同一数组上的一对非常简单的操作相矛盾

作为参考,该阵列使用以下代码构建在控制器中

  Reviews (<%= @reviews.count %>)
  <% if @reviews.any? %>
      <% @reviews.each do |review| %>
          This is one review <br />
      <% end %>
  <% end %>
class PlacesController < ApplicationController
  def show
    @place = Place.find(params[:id])
    @reviews = @place.reviews
    @title = @place.name
  end
end
class PlacesController

可能有什么问题?

我想大胆地回答:尝试将控制器内的代码更改为:

@reviews = @place.reviews.uniq

然后检查结果。

我冒昧地回答:尝试将控制器内的代码更改为:

@reviews = @place.reviews.uniq

然后检查结果。

似乎解决了这个问题。知道为什么吗Matthew Higgins

SQL内部联接发生在此处:) 它们生成重复的实体。通过修改控制器,您可以确保:

 def show
   @place = Place.find(params[:id])
   sql_query = @place.reviews.to_sql
   render text: sql_query       
 end

您将在浏览器中看到sql查询。然后在数据库管理器中执行此查询,您将看到重复的结果集。

似乎可以解决此问题。知道为什么吗Matthew Higgins

SQL内部联接发生在此处:) 它们生成重复的实体。通过修改控制器,您可以确保:

 def show
   @place = Place.find(params[:id])
   sql_query = @place.reviews.to_sql
   render text: sql_query       
 end

您将在浏览器中看到sql查询。然后在数据库管理器中执行此查询,您将看到重复的结果集。

我不喜欢回答我自己的问题,但我认为解释我发现的结果很重要,以防其他人也出现在同一个地方

正如Vitalyp所建议的,将
@reviews=@place.reviews.uniq
替换为
@reviews=@place.reviews.uniq
生成了正确的行数,但我正在努力找出原因,当打开表时,清楚地显示只有两条记录

事实证明,还有另一个模型,我以前尝试过使用它来创建一个多对多的关联,这是一个令人困惑的问题。看起来,由于我在决定不使用它之后没有完全删除它,而且当我完全销毁了模型、表和引用它的任何东西时,一切都恢复了正常

看起来review 1与位置关联了两次,一次是直接关联,一次是通过旧的多对多表关联,所以出现了两次


当我删除
有很多:
时,这没有多大意义,但我想这是Rails工作方式的一个特点。

我不喜欢回答我自己的问题,但我认为重要的是解释一下我发现了什么,以防其他人也在同一个地方

正如Vitalyp所建议的,将
@reviews=@place.reviews.uniq
替换为
@reviews=@place.reviews.uniq
生成了正确的行数,但我正在努力找出原因,当打开表时,清楚地显示只有两条记录

事实证明,还有另一个模型,我以前尝试过使用它来创建一个多对多的关联,这是一个令人困惑的问题。看起来,由于我在决定不使用它之后没有完全删除它,而且当我完全销毁了模型、表和引用它的任何东西时,一切都恢复了正常

看起来review 1与位置关联了两次,一次是直接关联,一次是通过旧的多对多表关联,所以出现了两次


当我删除了
有很多:
时,这没有多大意义,但我想这是Rails工作方式的一个特点。

这很奇怪。让我们在聊天中调试,也许加入我,唯一标识符?这很奇怪。让我们在聊天中调试,也许加入我,唯一标识符?似乎可以解决它。知道为什么吗?看来能解决问题。知道为什么吗?我想我可能已经找到了原因,我会很快写出来。我想我可能已经找到了原因,我很快就会写出来。似乎再次使用其他方法分配@reviews…因此,如果避免使用“@”变量,而使用不带“@”的普通变量名称…似乎再次使用其他方法分配@reviews…如果避免使用“@”变量,而使用不带“@”的普通变量名称。。