我想在 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>
答案 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动作。