#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. Да, это решение