未定义的方法'标题'为零:NilClass post.title

时间:2018-03-16 10:35:05

标签: ruby-on-rails undefined

我正在使用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

我是钢铁新手,我真的不知道如何解决这个问题......

希望你们能帮助我。

提前感谢您的帮助和兴趣!

2 个答案:

答案 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。