0

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

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 %>

公司控制器.rb

def index
    @companies = Company.all

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

2 回答 2

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渲染集合

于 2013-03-24T20:52:01.257 回答
1

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

于 2013-03-24T20:54:54.473 回答