我在这里遇到了一个奇怪的问题。我正在运行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;文件,没有重复显示的项目。
任何人都可以帮我解决这里发生的事情吗?我真的很感激!
答案 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的帮助!!