Не удается создать рельсы данных, ошибка метода отсутствует

#ruby-on-rails #ruby #ruby-on-rails-4

#ruby-на-рельсах #рубиновый #ruby-on-rails-4 #ruby-on-rails #ruby

Вопрос:

Я внедряю веб-сайт с использованием Ruby on Rails. У меня проблема, из-за которой я не могу создать новые данные и сохранить их в своей модели. Ошибка, которую я получил, заключается в том, что ошибка указывала на @vpermits = current_user.vpermits.build(vpermit_params). У кого-нибудь есть идеи о том, что я сделал не так?

 NoMethodError in VisitorPermitsController#create
undefined method `vpermits' for #<User:0x9b7b478>


    def create
        @vpermits = current_user.vpermits.build(vpermit_params)
        if @vpermits.save
          redirect_to @vpermits
        else
  

Это мой visitor_permits_controller.rb

 class VisitorPermitsController < ApplicationController
    before_action :set_vpermit, only: [:destroy]
    def index
      @vpermits = VisitorPermit.where(:user_id => current_user.id)
    end

    def new
      @vpermits = VisitorPermit.new
    end

    def create
        @vpermits = current_user.vpermits.build(vpermit_params)
        if @vpermits.save
          redirect_to @vpermits
        else
          render 'new'
        end
      end


    def destroy
      VisitorPermit.destroy_all(user_id: current_user)
      respond_to do |format|
        format.html { redirect_to root_path, notice: 'Permit was successfully canceled.' }
        format.json { head :no_content }
      end
    end

    def show
      @vpermits = VisitorPermit.find(params[:id])
    end

    def update
      @vpermits = VisitorPermit.where(user_id: current_user).take
      respond_to do |format|
        if @vpermits.update(vpermit_params)
          format.html { redirect_to root_path}
          flash[:success] = "Permit successfully updated"
          format.json { render :show, status: :ok, location: @user }
        else
          format.html { render :edit }
          format.json { render json: @user.errors, status: :unprocessable_entity }
        end
      end
    end

    def edit
      @vpermits = VisitorPermit.find(params[:id])
    end

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

    # Never trust parameters from the scary internet, only allow the white list through.
    def vpermit_params
      params.require(:visitor_permit).permit(:vehicle_type, :name, :department, :carplate, :duration, :permitstart, :permitend)
    end
  end
  

Комментарии:

1. Есть ли у вашего пользователя has_many :vpermits ? Как выглядит ваша пользовательская модель? Как выглядит ваша таблица базы данных пользователей?

2. Аааа, я уже нашел свою проблему. Проблема в том, что я использовал vpermits, у которого мой has_many является visitor_permits . Теперь я изменил его, спасибо, что указали на ошибку.

Ответ №1:

Из вашего кода у вас может быть связь (has_many ) между User VistorPermit моделями и . И вы указали имя своей модели как VistorPermit . Итак, строка кода для сборки должна быть такой:

 @vpermits = current_user.vistor_permits.build(vpermit_params)
  

Комментарии:

1. Да, это решение