form中的New post - First参数不能包含nil或为空



这是我点击"New Post:

时得到的错误

form中的第一个参数不能包含nil或为空

我为PostController:

class PostsController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
def index
    @posts = Post.all
end
def show
end
def edit
end
def update
    @post.update(post_params)
    redirect_to posts_path
end
def new
    if user_signed_in?
        @post = Post.new
    else
        flash[:alert] = ":("
    end
end
def create
    @post = Post.new(post_params)
    @post.user_id = current_user.id
    @post.save
    redirect_to posts_path
end
def destroy
    if user_signed_in?
        @post.destroy! 
    else
        flash[:alert] = ":("
    end
    redirect_to posts_path
end

private
def post_params
    params.require(:post).permit(:body)
end
def set_user
    @post = Post.find(params[:id])
end

结束

和文章#指数:

<% @posts.each do |post|  %>
<%= post.body %>
<%= link_to 'Show', post %>
<%= link_to 'Edit', edit_post_path(post) %>
<%= link_to 'Delete', post, method: :delete %>
<br>


_form.html.erb

<%= form_for(@post) do |f| %>
  <div class="field">
    <%= f.label :body %><br>
    <%= f.text_area :body %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

你应该检查你的"new.html "。动词"或"_form.html "。erb文件"。查看"form_for"方法是否被正确调用。

如果您使用的是设计,您可以通过添加before操作来实现:

before_action :authenticate_user!, only: [:new]

和你的新动作作为:

def new
  @post = Post.new
end

最新更新