列出显示视图页面上的所有帖子 - Rails

时间:2016-10-14 23:01:23

标签: ruby-on-rails list

我想在 app / views / posts / show.html.erb 页面上列出帖子,并按ID排序。

类似于使用下面的代码块在 app / views / posts / index.html.erb 页面上列出所有帖子的方式:

<% @posts.each do |post| %>
 <div class="col-md-4">
  <%= image_tag post.img %>
  <h1><%= post.title %></h1>
  <p><%= post.content %></p>
  <br>
  <%= link_to 'Read More', post_path(post) %>
 </div>
<% end %>

当我尝试在显示页面上使用相同的每个方法时,我收到错误。但这就是我目前所拥有的(它只显示当前帖子的img /链接):

  <h1>Recent Posts</h1>
  <ul>
    <li>
      <%= image_tag @post.img %>
      <h2>
        <%= link_to @post.title %>
      </h2>
    </li>
  </ul>

2 个答案:

答案 0 :(得分:3)

索引用于显示x的所有项目。

def index
  @posts = Post.all
end

所以你正在做的是把你所有的帖子,并把它们放在一个名为@posts的数组中。您可以使用.each do | x |迭代或枚举。这意味着遍历数组中的每个对象并显示帖子图像,标题和内容。

您没有显示您的节目,但通常显示如下:

def show
  @post = Post.find(params[:id])
end

所以你找到了帖子:id并将这些数据存储在@post中。这只是一个对象,它不是一个数组。这就是你的.each做| x |的原因没有用。

没有什么能阻止你制作

def show
  @posts = Post.all
end

但是你不能利用rails快捷键并重复自己,这在编程方面并不好。如果你想要两个使用相同信息的非常不同的窗口,最好用html / css中的一些javascript来计算出来。

答案 1 :(得分:0)

.nav-forum > a的展示操作可能只设置PostsController,而不是@post。您不能将@posts.each一起使用,因为它是@post的实例,而不是数组或响应Post的内容。查看在索引操作中如何设置.each,并将其复制到您的show动作。