rails param缺失或值为空:post

时间:2014-11-06 00:42:45

标签: ruby-on-rails

我一直坚持这个问题已经有一段时间了,并且在解决方案之后搜索了解决方案,到目前为止,我遇到的问题都没有用。

我为我的应用程序为一个新的Object创建了一个新的rails scaffold,我已经设置了表,我可以在运行服务器时查看Post对象。

当我的服务器运行时我去查看Post对象的问题,它的内容没有显示,我无法更新这个错误被抛出的对象:

param is missing or the value is empty: post

数据库中的Posts table如下所示:

posts table

正如您所看到的,当我去查看帖子时,字段content包含我想要在我的页面上显示的数据。

这就是出现的结果:

what i see when running the server

如您所见,它不会显示content字段的内容。

这是我的posts_controller.rb

class PostsController < ApplicationController
  # you may want to udpate these posts? typo's outdated info?
  before_action :set_post, only: [:show, :edit, :update, :destroy]

  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.all
  end

  # GET /posts/1
  # GET /posts/1.json
  def show
  end

  # GET /posts/new
  def new
    @post = Post.new
  end

  # GET /posts/1/edit
  def edit
  end

  # POST /posts
  # POST /posts.json
  def create
    @post = Post.new(post_params)

    respond_to do |format|
      if @post.save
        format.html { redirect_to @post, notice: 'Post was successfully created.' }
        format.json { render action: 'show', status: :created, location: @post }
      else
        format.html { render action: 'new' }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /posts/1
  # PATCH/PUT /posts/1.json
  def update


    respond_to do |format|
      if @post.update(post_params)
        format.html { redirect_to @post, notice: 'Post was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /posts/1
  # DELETE /posts/1.json
  def destroy
    @post.destroy
    respond_to do |format|
      format.html { redirect_to posts_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_post
      @post = Post.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def post_params
      params.require(:post).permit(:content)
    end
end

我认为这可以让我看到content

def post_params
  params.require(:post).permit(:content)
end

我认为这是因:post

而定义before_action :set_post, only: [:show, :edit, :update, :destroy]的原因
def set_post
  @post = Post.find(params[:id])
end

这是rails中错误页面上显示的内容:

{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"tHFQAWv08aUoi7ndZsVC1aCNJkYP6hE8w+89NTTpBjc=",
 "commit"=>"Update Post",
 "id"=>"2"}

我真的很困惑为什么会发生这种情况,我对rails很新,所以毫无疑问我错过了一些基本的东西。

谢谢, 克里斯。

1 个答案:

答案 0 :(得分:0)

您的请求缺少post参数:

{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"tHFQAWv08aUoi7ndZsVC1aCNJkYP6hE8w+89NTTpBjc=",
 "commit"=>"Update Post",
 "id"=>"2"}

这很可能是由于app/views/posts/edit.html.erb视图中的表单错误造成的。表单应如下所示:

<%= form_for @post, url: {action: "edit"} do |f| %>
  <%= f.text_area :content %>
<%= end %>

您可以在rails guides中了解有关表单的更多信息。