2015-06-05 3 views
0

У меня есть ссылка, как указано в «учителе». эта ссылка должна отправить идентификатор другому контроллеру «teacher_details» (отношение 1 к 1). Эта ссылка открывает веб-страницу, чтобы добавить более подробную информацию о преподавателе.Как передать идентификатор/параметр контроллеру ROR

<%= link_to 'Add details', new_teacher_detail_path(@teacher), :id => "add_detail_link" %> 

Мой код контроллера

private 
def set_teacher 
    @teachers = Teacher.find(params[:id]) 
end 

Когда я запускаю этот код он показывает мне ошибку, что «не может найти с из идентификатора». Что я делаю не так. Ссылка не передает параметр id правильно.

файл Маршрут

root 'sessions#login' 
    get 'homes/home' 
    get '/login' => "sessions#login", :as => "login" 
    get '/logout' => "sessions#logout", :as => "logout" 
    get '/homes' => "homes#home" 
    resources :users 
    resources :sessions 
    resources :homes 
    resources :teachers 
    resources :teacher_details 
    resources :profiles 
+0

Показать файл маршрутов, как вы определяете маршруты для 'new_teacher_detail_path' – Nermin

ответ

0

Похоже, вы не вложенности TeacherDetail с моделью учителя в маршрутизации.

Именно поэтому он не получает никакого параметра id в new_teacher_detail_path. Таким образом, вы не можете найти params[:id] в действии ниже.

private 
    def set_teacher 
    @teachers = Teacher.find(params[:id]) 
    end) 

Попробуйте изменить свой link_to, как показано ниже:

<%= link_to 'Add details', new_teacher_detail_path(:id => @teacher.id), :id => "add_detail_link" %> 

Теперь вы получите параметр ID правильно.

+0

Я пробовал с вложением, все еще имея проблемы с передачей параметров. хотя он отлично работал с пользователем и профилем. Как я должен это делать? PLS help –

+0

Я обновил свой ответ, и теперь вы получите Id правильно. Без гнездования –

0

Маршруты файл для учителя и детали должны быть такими:

resources :teachers do 
    get 'details/new', on: :member 
end 

Тогда в силу вы можете использовать link_to как этот

<%= link_to 'Add details', details_new_teacher(@teacher) %> 

Нет необходимости менять контроллер

0

В одном -отношения teacher_detail имеет foreign_key как teacher_id, поэтому вы можете использовать как это

<%= link_to 'Add details', new_teacher_detail_path(id: @teacher.id), :id => "add_detail_link" %>