我正在创建一个博客类型的网站,我希望帖子最新显示(降序)我尝试了一些不同的东西,并且我们无法弄明白。这是我目前的代码:
post.html.erb
<%= @posts.each do |post|%>
<div>
<p><%= avatar_for(post.user, size: 40) %>
<%= link_to post.username, post.user %></p>
<h2>
<%= link_to post.title, post %>
</h2>
</div>
<% end%>
发布控制器
class PostsController < ApplicationController
before_action :authenticate_user!
def posts
@posts = Post.all.order("created_at DESC")
end
def new
@post = Post.new
end
def create
@post = current_user.posts.new(post_params)
if @post.save
redirect_to post_path(@post)
else
render :new
end
end
def show
@post = Post.find(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :body, :all_tags)
end
end
答案 0 :(得分:2)
答案 1 :(得分:1)
这应该是@posts
,因为您在@posts
调用post.html.erb
来检索并显示所有帖子:
def posts
@posts = Post.all.order("created_at DESC")
end
答案 2 :(得分:1)
该方法应该看起来像
def posts
# Plural @posts
@posts = Post.all.order(created_at: :desc)
end
只是一个小修复,在您的帖子方法中,您要声明@post
变量,但在ERB文件中您正在调用@posts
。
这应该是给你一个零错误。声明@posts
(复数),然后使用更好的缩进声明您的ERB文件:
<%= @posts.each do |post| %>
<div>
<p>
<%= avatar_for(post.user, size: 40) %>
<%= link_to post.username, post.user %>
</p>
<h2>
<%= link_to post.title, post %>
</h2>
</div>
<% end%>
答案 3 :(得分:0)
如果此问题尚未得到解答:
看起来问题来自PostsController中方法的名称。
您希望能够通过名为posts的方法访问@posts,但您尝试呈现的视图的文件名是post.html.erb。我相信它应该是posts.html.erb。
为什么不把它称为索引?这就是Rails惯例。
正如其他人所说,查询是正确的。希望这会有所帮助。