模型index.html页面显示重复数据

时间:2013-03-24 20:46:06

标签: ruby-on-rails

我的模型索引页面上出现了一些奇怪的行为。当我创建一个模型对象时,它在索引页面上正确显示。当我创建第二个模型对象时,它会在索引页面上显示两个对象的重复项,如此

OBJECT A
OBJECT B
OBJECT A
OBJECT B

我已确认我的数据库中没有创建重复的对象。此外,当我摧毁OBJECT B时,它只能正确显示一次OBJECT A.

index.html.erb

<table class="table">
  <thead>
    <tr>
      <th>Image</th>
      <th>Name</th>
      <th>Description</th>
      <th>URL</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>

  <tbody>
    <%= render @companies %>
  </tbody>
</table>

_company.html.erb

<% @companies.each do |company| %>
  <tr>
    <td><%= image_tag company.image(:medium) %></td>
    <td><%= company.name %></td>
    <td><%= company.description %></td>
    <td><%= company.url %></td>
    <td><%= link_to 'Show', company %></td>
    <td><%= link_to 'Edit', edit_company_path(company) %></td>
    <td><%= link_to 'Destroy', company, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>

companies_controller.rb

def index
    @companies = Company.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @companies }
    end
  end

2 个答案:

答案 0 :(得分:2)

将您的部分更改为,

<tr>
  <td><%= image_tag company.image(:medium) %></td>
  <td><%= company.name %></td>
  <td><%= company.description %></td>
  <td><%= company.url %></td>
  <td><%= link_to 'Show', company %></td>
  <td><%= link_to 'Edit', edit_company_path(company) %></td>
  <td><%= link_to 'Destroy', company, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>

您需要删除部分中的每个循环。

<%= render @companies %>为每家公司提供部分内容,但您也会在每个公司中再次浏览公司。

请参阅http://guides.rubyonrails.org/layouts_and_rendering.html#rendering-collections上的 3.4.5渲染集合以获取更多信息

答案 1 :(得分:1)

<%= render @companies %>更改为<%= render "company" %>;你的部分被渲染多次,每个公司一个,你的部分渲染所有公司。这只会渲染部分,这将呈现所有公司,这就是你想要的。