Ruby on Rails中出现不允许的参数错误

时间:2018-06-27 03:42:21

标签: ruby-on-rails

在Rails Controller中创建记录时,发生以下错误:

  

在2018-06-27 08:11:01为127.0.0.1开始发布POST“ / spr_type_courses”

     

+0500由SprTypeCoursesController#create作为HTML参数进行处理:{“ spr_type_course” => {}}不允许的参数:

     

:spr_type_course序列(3.0ms)从中选择us.sequence_name

     

all_sequences指向我们,其中us.sequence_owner ='PROJECT'和

     

us.sequence_name = upper('SPR_TYPECOURSES_seq')主键(10.0ms)

     

从all_constraints c,all_cons_columns cc中选择cc.column_name

     

c.owner ='PROJECT'AND c.table_name ='SPR_TYPECOURSES'和

     

c.constraint_type ='P'AND cc.owner = c.owner AND cc.constraint_name

     

= c.constraint_name主键触发器(3.8ms)SELECT trigger_name             来自all_triggers             所有者='PROJECT'               AND trigger_name = q'[PROJECT.SPR_TYPECOURSES_PKT]'               AND table_owner ='PROJECT'               AND table_name = q'[SPR_TYPECOURSES]'               AND状态=“已启用”

     

SQL(5.3毫秒)插入“项目”。“ SPR_TYPECOURSES”

     

(“ TYPECOURSE_ID”)值(:a1)[[“ typecourse_id”,3623]已完成500   内部服务器错误在61毫秒内

     

ActiveRecord :: NotNullViolation(OCIError:ORA-01400:无法插入

     

NULL插入(“ PROJECT”。“ SPR_TYPECOURSES”。“ DATE_BEGIN”):插入

     

“项目”。“ SPR_TYPECOURSES”(“ TYPECOURSE_ID”)值(:a1)):

     

app / controllers / spr_type_courses_controller.rb:17:在“创建”中

这意味着什么,需要做些什么来纠正它?

class SprTypeCoursesController < ApplicationController
  before_action :set_spr_type_course, only: [:show, :update, :destroy]

  def index
    @spr_type_courses = SprTypeCourse.all

    render json: @spr_type_courses
  end

def show
  render json: @spr_type_course
end

def create
  @spr_type_course = SprTypeCourse.new(spr_type_course_params)

  if @spr_type_course.save
    render json: @spr_type_course, status: :created, location: @spr_type_course
  else
    render json: @spr_type_course.erros, status: :unprocessable_entity
  end
end

def update
  if @spr_type_course.update(spr_type_course_params)
    render json: @spr_type_course
  else
    render json: @spr_type_course.errors, status: :unprocessable_entity
  end
end

def destroy
  @spr_type_course.destroy
end

private
  def set_spr_type_course
    @spr_type_course = SprTypeCourse.find(params[:id])
  end

# Only allow a trusted parameter "white list" through.
def spr_type_course_params

  params.permit(
      :typecourse_id,
      :date_begin,
      :date_end,
      :name,
      :comments,
      :active_id
  )
end
end

1 个答案:

答案 0 :(得分:0)

您的spr_type_course_params是问题所在。 如您在错误日志中所见,强参数中不允许使用spr_type_course参数。另外,spr_type_course参数为空。请检查提交的表格。

  

{“ spr_type_course” => {}}不允许的参数:

通过以下更改:

def spr_type_course_params
  # here I assume the typecourse_id, date_begin etc params are all 
  # included in spr_type_course schema
  params.require(:spr_type_course).permit(
      :typecourse_id,
      :date_begin,
      :date_end,
      :name,
      :comments,
      :active_id
  )
end