循环部分

时间:2016-10-19 23:53:49

标签: ruby-on-rails-5

我正在创建一个博客,在索引上我循环浏览每篇文章的部分内容,以便我可以在没有评论部分的情况下显示帖子,它看起来像这样:

<% render partial: 'view_post_only', collection: @articles %>

将您带到部分_view_post_only:

<h1><%= link_to @article.title, article_path %></h1>
<p>
  Written by <%= link_to @article.author.username, author_path(@article.author_id), class: "article-listing" %>
</p>
<% if @article.image.exists? %>
  <p><%= image_tag @article.image.url %></p>
<% end %>
<p class="article-body"><%= @article.body %></p>

我在view_post_only的第一行收到此错误:

No route matches {:action=>"show", :controller=>"articles"} missing required keys: [:id]

最后,包含在我的routes.db中:

resources :articles do
    resources :comments
  end

1 个答案:

答案 0 :(得分:1)

要解决第一个错误,请更改:

<h1><%= link_to @article.title, article_path %></h1>

要:

<h1><%= link_to @article.title, article_path(@article) %></h1>

article_path帮助器需要您尝试链接的资源实例,以便知道要去哪里。

此外,您的每篇文章的实例&#34;未保存在@article变量中。按照惯例,rails会将部分名称单一化,并为您提供访问该项目的方法。在这种情况下,约定会产生一个名为view_post_only的方法(我认为)。因此,您可以在模板中将@article替换为view_post_only。像这样:

<h1><%= link_to view_post_only.title, article_path(view_post_only) %></h1>

这种惯例似乎在这种情况下效果不佳。为了使您的部分阅读更好,我明确说明您要将该项目称为项目:

<% render partial: 'view_post_only', collection: @articles, as: :article %>

然后在@article中仅使用article替换您对_view_post_only的引用。