2017-01-05 2 views
0

Я изо всех сил стараюсь получить эту работу. У меня есть три моделивложенные рельсы формы 4 сохранить существующую запись при создании

  1. Студент
  2. Classroomattnd
  3. Класс

Использование has_many: через отношения. Все мои отношения определены правильно, и я установил вложенную форму, используя accepts_nested_attributes.

Итак, при создании нового ученика я хочу выбрать из списка классных комнат вместо создания нового класса. Часть формы также отлично работает, часть, которую я не получаю, - это когда я создаю ученика, который жалуется на следующую ошибку.

Не удалось найти Classrooom с ID = 3 для Student с ID =

Я искал вокруг в течение нескольких дней в настоящее время, но не может получить ответ, мне нужно, чтобы получить эту работу.

def new 
    @student = Student.new 
    @student.classrooms.build 
end 

def edit 
end 

def create 
    @student = Student.new(student_params) 

    respond_to do |format| 
    if @student.save 
     format.html { redirect_to @student, notice: 'Student was successfully created.' } 
     format.json { render :show, status: :created, location: @student } 
    else 
     format.html { render :new } 
     format.json { render json: @student.errors, status: :unprocessable_entity } 
    end 
    end 
end 

Может кто-то помочь здесь, кто-то должен столкнуться с этим вопросом раньше?

Кроме того, в консоли рельсы, когда я бегу следующие его работы:

classroom = Classroom.last 
student = Student.create(name: 'Dave', classrooms:[classroom]) 
+0

Выглядит из этого пустого идентификатора, как будто вы не получаете студенческие поля. Как определяется «student_params»? Я ожидаю увидеть нечто большее, чем params [: student]. – elc

+0

Параметры ученика определены ниже в контроллере: def student_params params.require (: student) .permit (: name, classrooms_attributes: [: id,: name]) end @elc – Waqas

ответ

0

Ваше обращение параметр не поддерживает вложенности. Вы можете посмотреть параметры запроса в своем журнале сервера или проверить имена полей вашей сгенерированной формы, чтобы быть уверенными в своей цели. Это будет что-то вроде строк

def student_params 
    params.require(:student).permit(:student => [:name, :classroom => [:id, :name]]) 
end 

Или, может быть, как показано ниже. В этом втором случае я не предполагаю, что все в форме вложено под контейнер студента. Также обратите внимание на переход от класса к classroom_attributes, который является изменением, которое мне иногда нужно делать, даже если форма выше - это то, что указывают документы.

def student_params 
    params.require(:name).permit(:classroom_attributes => [:id, :name]) 
end 

Надеюсь, это даст вам представление о том, как настроить определение параметра на то, что генерирует ваша форма. Также обратите внимание, что ваши сообщения об ошибках дают вам представление о том, какая часть вашего определения терпит неудачу, например, недостающий идентификатор Student в указанной вами ошибке.

+0

Спасибо @elc, который сделал трюк, я думаю, ну, по крайней мере, я больше не получаю такую ​​же ошибку, я позабочусь об этом сейчас. – Waqas

Смежные вопросы