«Не найдено ни одного маршрута {: action =>« show »,: controller =,: id => nil} отсутствуют обязательные ключи: [: id]» ошибка при рендеринге частичного из другой папки - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть часть в файле app / views / school / teacher / _sub_tabs.html.haml.Я сделал это частично в app / views / school / teacher / form.html.haml, и он отлично работает.Но когда я пытаюсь отобразить его в компонентах / student / app / views / objects / Students / index.html.haml, выдается ошибка: No route matches {:action=>"show", :controller=>"school/teachers", :id=>nil} missing required keys: [:id]

Ошибка:

#tertiary-slider.pills-container

  %span

#tertiary-slider.pills-container
  %span
    = link_to t('.add_names'), teachers_path(@teacher), class: selected_tab[:add_names]
  %span
    = link_to t('.add_subject'),subjects_student_path(@resource), class: selected_tab[:add_subject]

Он выдает ошибку на вкладке «add_names»

  1. app/views/school/teachers/_sub_tabs.html.haml:
#tertiary-slider.pills-container
  %span
    = link_to t('.add_names'), teacher_path(@teacher), class: selected_tab[:add_names]
  %span
    = link_to t('.add_subject'),subjects_student_path(@resource), class: selected_tab[:add_subject]

Здесь @resource может быть teacher или student,

components/student/app/views/subjects/students/index.html.haml:
.col-xs-12.well-bordered
  = render 'school/teachers/sub_tabs', { selected_tab: { setting: 'selected' } }

Я думаю, он не может найти @teacher в subject/students.Но я возвращаю действие в Subjects::Students контроллере как:

    def find_resource
      @resource = if params[:teacher_id]
        teacher.find(params[:teacher_id])
      else
        @student
      end
    end

Маршруты имеют вид:

    scope '/school' do
      resources :teachers, module: :school
      namespace :subjects do
        resources :students
      end
    end

Когда я проверял, переданный ресурс равен student, а не teacher.Как передать teacher объект?Names и Subjects оба принадлежат teacher.

Спасибо

РЕДАКТИРОВАТЬ 1:

Я пытался передать объект @teacher на пути как:

#tertiary-slider.pills-container

  %span

#tertiary-slider.pills-container
  %span
    = link_to t('.add_names'), teachers_path(@teacher), class: selected_tab[:add_names]
  %span
    = link_to t('.add_subject'),subjects_student_path(@teacher), class: selected_tab[:add_subject]

Но даже тогда учительсобирается ноль в Subjects::Students контроллер.И теперь я получаю ошибку:

Not found

1 Ответ

0 голосов
/ 15 февраля 2019

В вашем пароле есть @teacher, но в вашем контроллере вы просто присваиваете переменную teacher.Добавьте @!

РЕДАКТИРОВАТЬ: Кроме того, когда вы рендерит партиал, вы можете передать @teachers через, например, так: = render 'school/teachers/sub_tabs', { teachers: @teachers, selected_tab: { setting: 'selected' } } В партиале вы можете получить к нему доступ с помощью teachers затем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...