我正在使用ruby on rails创建一个网站,并希望添加一个帖子部分。 我看过StackOverflow的解决方案,但我无法满足我的需求。
show.html.erb
<!-- Post Content Column -->
<div class="col-lg-8">
<!-- Title -->
<h1 class="mt-4"><%= @post.title %> </h1>
<!-- Author -->
<p class="lead">
by
<a href="#">Start Bootstrap</a>
posts_controller.rb
class PostController < ApplicationController
def index
@posts = Post.all.order('created_at DESC')
end
def create
@post = Post.new(params[:post].permit(:title, :text))
if @post.save
redirect_to @post
else
render 'new'
end
end
def show
@posts = Post.find(params[:id])
@posts = Post.order("created_at DESC").limit(4).offset(1)
end
def edit
@post = Post.find(params[:id])
end
def update
@post = Post.find(params[:id])
if @post.update(params[:post].permit(:title, :text))
redirect_to @post
else
render 'edit'
end
end
def destroy
@post = Post.find(params[:id])
@post.destroy
redirect_to posts_path
end
private
def post_params
params.require(:post).permit(:title, :body)
end
我是钢铁新手,我真的不知道如何解决这个问题......
希望你们能帮助我。提前感谢您的帮助和兴趣!
答案 0 :(得分:2)
在show.html.erb
文件中,您使用@post
变量,但未在show
控制器中定义。这就是您遇到错误Undefined method 'title' for nil:NilClass post.title
的原因。
相反,您有@posts
变量。按照惯例,您应该以单数形式将此变量命名为show action。
答案 1 :(得分:1)
你的节目动作用s声明@posts,show视图使用@post而不用s。