我正在本地使用一个简单的rails应用程序来进行自己的学习。
在我看来,我有以下代码;
Reviews (<%= @reviews.count %>)
<% if @reviews.any? %>
<% @reviews.each do |review| %>
This is one review <br />
<% end %>
<% end %>
尽管看起来很简单,但输出结果如下;
评论(2)
这是一篇评论
这是一篇评论
这是一篇评论
这似乎与同一阵列上应该是一对非常简单的操作相矛盾。
作为参考,使用以下代码在控制器中构建数组;
class PlacesController < ApplicationController
def show
@place = Place.find(params[:id])
@reviews = @place.reviews
@title = @place.name
end
end
可能是什么问题?
答案 0 :(得分:2)
我会冒昧地回答:尝试将控制器内的代码更改为:
@reviews = @place.reviews.uniq
检查结果。
答案 1 :(得分:1)
似乎要解决它。知道为什么吗? - Matthew Higgins
SQL内部联接在这里取得了一席之地:) 它们会产生重复的实体。您可以通过修改控制器来确保:
def show
@place = Place.find(params[:id])
sql_query = @place.reviews.to_sql
render text: sql_query
end
你会在浏览器中看到sql查询。然后在数据库管理器中执行此查询,您将看到重复的结果集。
答案 2 :(得分:1)
我不喜欢回答我自己的问题,但我认为解释我发现的事情很重要,因为其他人最终会在同一个地方。
正如Vitalyp建议的那样,将@reviews = @place.reviews.uniq
替换为@reviews = @place.reviews.uniq
会产生正确的行数,但我正在努力解决原因,当打开表格时,显示只有两个记录。
事实证明,还有另一个模型,我之前尝试过使用它来创建多对多关联,这让人感到困惑。看来,由于我在决定不使用它之后没有完全删除它,当我完全销毁模型时,它的表格和任何引用它的东西都恢复正常。
似乎评论1与该地点相关联两次,一次是直接,一次是通过旧的多对多表,所以它出现了两次。
当我删除has_many:
时,它没有多大意义,但我想这是Rails工作原理的一个特点。