【问题标题】:Unpermitted parameter error in Ruby on RailsRuby on Rails 中不允许的参数错误
【发布时间】:2018-06-27 03:42:21
【问题描述】:

在 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 Sequence (3.0ms) select us.sequence_name from

all_sequences us where us.sequence_owner = 'PROJECT' and

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

SELECT cc.column_name FROM all_constraints c, all_cons_columns cc

在哪里 c.owner = 'PROJECT' AND c.table_name = 'SPR_TYPECOURSES' AND

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

= c.constraint_name 主键触发器 (3.8ms) SELECT trigger_name FROM all_triggers WHERE 所有者 = '项目' AND trigger_name = q'[PROJECT.SPR_TYPECOURSES_PKT]' AND table_owner = '项目' AND table_name = q'[SPR_TYPECOURSES]' AND 状态 = '启用'

SQL (5.3ms) INSERT INTO "PROJECT"."SPR_TYPECOURSES"

("TYPECOURSE_ID") VALUES (:a1) [["typecourse_id", 3623]] 已完成 500 61 毫秒内的内部服务器错误

ActiveRecord::NotNullViolation (OCIError: ORA-01400: cannot insert

NULL into ("PROJECT"."SPR_TYPECOURSES"."DATE_BEGIN"): INSERT INTO

"PROJECT"."SPR_TYPECOURSES" ("TYPECOURSE_ID") VALUES (:a1)):

app/controllers/spr_type_courses_controller.rb:17:in `create'

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

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

【问题讨论】:

  • 在创建“项目”的位置显示您的 db/schema.rb 文件。错误消息暗示“BEGIN_DATE”可能不是 NULL。
  • 我没有这个文件,我远程连接到数据库
  • 您需要了解数据库结构的详细信息才能对其进行编程。
  • @user9997575 你可以发布form_for,从html表单部分调用。
  • 在您的帖子中添加您使用的数据库类型。如果是 MySQL,请运行 SHOW CREATE TABLE PROJECTS 以查看它是否允许 NULL 存在。对于其他数据库,运行为该表转储您的架构的等效项。

标签: ruby-on-rails


【解决方案1】:

您的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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    相关资源
    最近更新 更多