NoMethodError (неопределенный метод `save 'для nil: NilClass) - PullRequest
0 голосов
/ 26 июня 2018

Я использую Ruby на рельсах в качестве бэкенда. При создании записи возникает такая ошибка:

Запущен POST "/ spr_type_events" для 127.0.0.1 в 2018-06-26 15:09:31 +0500 Обработка SprTypeEventsController # создать как JSON Параметры: {"spr_type_event" => {}} Недопустимый параметр: : spr_type_event выполнено 500 Внутренняя ошибка сервера в 77ms

NoMethodError (неопределенный метод `save 'для nil: NilClass):

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

Уже не понимаю, что тут не так:

class SprTypeEventsController < ApplicationController
    before_action :set_spr_type_event, only: [:show, :update, :destroy]

    def index
        @spr_type_events = SprTypeEvent.all

        render json: @spr_type_events
    end

    def show
        render json: @spr_type_event
    end

    def create
        @spr_type_event = SprTypeEvent.new(spr_type_event_params)

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

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

    def destroy
        @spr_type_event.destroy
    end

    private

    def set_spr_type_event
        @spr_type_event = SprTypeEvent.find(params[:id])
    end

    # Only allow a trusted parameter "white list" through.
    def spr_type_event_params
        params.permit(
          :type_id,
          :date_begin,
          :date_end,
          :name,
          :comments
        )
    end
end

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вы не инициализировали @spr_turbodrill_type в вашем контроллере для метода создания, я думаю, @spr_type_event должен быть там. Как в следующем коде

def create
  @spr_type_event = SprTypeEvent.new(spr_type_event_params)

  if @spr_type_event.save
    render json: @spr_type_event, status: :created, location: @spr_type_event
  else
    render json: @spr_type_event.erros, status: :unprocessable_entity
  end
end
0 голосов
/ 26 июня 2018

Сначала вы объявили переменную, такую ​​как @spr_type_event, но вызывайте, когда save, как @spr_turbodrill_type, она подключена, поэтому измените ее, например: @spr_type_event.save, следуйте приведенным ниже измененным кодам

def create
  @spr_type_event = SprTypeEvent.new(spr_type_event_params)

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

и метод сильных параметров, как этот, вы можете сохранить разрыв, который вы кодируете, но нужно добавить это require(:spr_type_event)

def spr_type_event_params
    params.require(:spr_type_event).permit(:type_id, :date_begin, :date_end, :name, :comments)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...