Rails 4.2.1,使用带有部分的集合导致显示的项目根据项目数重复

时间:2016-05-22 07:09:56

标签: ruby-on-rails ruby ruby-on-rails-4 partials repeat

我在这里遇到了一个奇怪的问题。我正在运行Rails 4.2.1&我正在使用Anthony Lewis的Rails Crash Course一书,并按照本书中的说明进行操作。书籍说明的链接是found here来自Google图书。

因此,在说明中他说要将以下代码块移动到名为" _post.html.erb"

的部分内容中
<% @posts.each do |post| %>

<h2><%= link_to post.title, post %></h2>

<p><i><%= friendly_date post.created_at %></i></p>

<p><%= post.body %></p>

<p>

<%= link_to 'Edit', edit_post_path(post) %>

<%= link_to 'Destroy', post, method: :delete,

        data: { confirm: 'Are you sure?' } %>

</p>

<% end %>

然后他说您可以运行以下代码来基本激活部分代码。

<%= render :partial => 'post', :collection => @posts %>

// or the simplified version ...

<%= render @posts %>

然而,当我这样做时,页面上显示的项目会按项目数重复。所以在这种情况下,我有3个项目,他们重复3次。 I have attached a screenshot.

但是,当代码未被删除为部分并且没有使用任何集合时,它可以正常工作。换句话说,将代码放在视图中&#34; index.html.erb&#34;文件,没有重复显示的项目。

任何人都可以帮我解决这里发生的事情吗?我真的很感激!

3 个答案:

答案 0 :(得分:0)

对于每个post Rails正在运行部分代码,您可以在其中遍历所有帖子,从而获得重复!

从你的部分中取出迭代,你应该没问题。当您将post与集合一起使用时,Rails会自动在您的部分中分配局部变量render

<h2><%= link_to post.title, post %></h2>

<p><i><%= friendly_date post.created_at %></i></p>

<p><%= post.body %></p>

<p>

<%= link_to 'Edit', edit_post_path(post) %>

<%= link_to 'Destroy', post, method: :delete,

        data: { confirm: 'Are you sure?' } %>

</p>

答案 1 :(得分:0)

  <%= render @posts %> 

如果你这样做@posts已经是帖子的集合,因此你不需要再次迭代,只需删除这部分:

<% @posts.each do |post| %>

<% end %>

答案 2 :(得分:0)

看起来这个问题已经解决了。我误读了段落,并且正在复制@petr和@ marv-c指出的代码。正确的解决办法是将块内的代码移动到部分文件

<h2><%= link_to post.title, post %></h2>

<p><i><%= friendly_date post.created_at %></i></p>

<p><%= post.body %></p>

<p>

<%= link_to 'Edit', edit_post_path(post) %>

<%= link_to 'Destroy', post, method: :delete,

    data: { confirm: 'Are you sure?' } %>

</p>

然后删除块<% @posts.each do |post| %><%-# end %>的代码现在我可以添加块最初的集合代码<%= render @posts %>

再次感谢@petr和@ marv-c的帮助!!