2016-12-23 6 views
0

私はを私のルートに持っています。ルート上の懸念事項の使用方法ruby on rails

DRYアプローチを使用しているので、私はresources :subjectsが必要でない他のケースのルート行を書き直す必要はありません。

リンクは以下のようなもので、私がそれを必要としないように私は、第二の場合には何のsubject_idを持っていない明確である:

http://localhost:3000/teacher/katherine-fleming/subjects/3/lesson_plans/3 

http://localhost:3000/teacher/carmel-cynthia/lesson_plans/3 

を今、それは両方のために動作を停止します例と言って:ケース1のため

ActionController::RoutingError (No route matches [GET] "/teacher 
/katherine-fleming/subjects/3/lesson_plans/3"): 

ActionController::RoutingError (No route matches [GET] "/teacher/carmel- 
cynthia/lesson_plans/68"): 

私のルートは以下のとおりです。

resources :subjects do 
       concern :lesson_plans, :except => [:index] do 
       resources :lesson_plan_registrations 
       resources :comments, only: [:new, :create, :destroy] 
       end 
end 

以下のコードを使用して動作させようとしていますが、期待通りに動作しません。今働いている何

resources :lesson_plans, concerns: :lesson_plans 

は次のとおりです。

resources :subjects do 
       resources :lesson_plans, :except => [:index] do 
       resources :lesson_plan_registrations 
       resources :comments, only: [:new, :create, :destroy] 
       end 
end 
       resources :lesson_plans, :except => [:index] do 
       resources :lesson_plan_registrations 
       resources :comments, only: [:new, :create, :destroy] 
       end 

しかし、その何かが私はresources :subjectsを必要としない場合のために、再び全体のコードを再書き込みします。

私はDRYアプローチを使用したいので、どちらの場合でも動作します。

Rails.application.routes.draw do 

    root 'welcome#index' 

    devise_for :users, controllers: {sessions: 'sessions', registrations: 'registrations', :omniauth_callbacks => 'omniauth_callbacks'} 

    resources :requested_schools, only: [:new, :create] 
    resources :tags, only: :index 
    resources :specializations, only: :index 

    resources :search, only: :index 
    get '/fetch_schools' => 'search#fetch_schools' 
    get '/fetch_subjects' => 'search#fetch_subjects' 

    resources :search_results do 
    collection do 
     get '/lesson_plan' => 'search_results#lesson_plan', as: :lesson_plan 
     get '/video' => 'search_results#video', as: :video 
     get '/document' => 'search_results#document', as: :document 
     get '/note' => 'search_results#note', as: :note 
    end 
    end 

    namespace :admin do 
    root 'dashboard#index' 
    get 'login' => 'sessions#new', as: :login 
    resources :dashboard, only: [:index] 
    resources :requested_schools, only: [:index, :edit, :edit, :show, :destroy] do 
     member do 
     get :accept_request 
     get :decline_request 
     get 'view_files' => 'requested_schools#view_files', as: :view_files 
     get 'imported_data' => 'requested_schools#imported_data', as: :imported_data 
     end 
    end 
    resource :users, :except => [:show, :index, :new, :create] do 
     member do 
     get :change_password 
     patch :update_password 
     end 
    end 
    end 

    namespace :school do 
    root 'dashboard#index' 
    resources :dashboard, :path => '/', only: [:index] 
    resources :departments do 
     resources :subjects 
    end 
    resources :class_rooms do 
     resources :class_room_subjects 
     resources :class_room_schedules 
     resources :class_room_registrations do 
     collection do 
      post "/student_registration" => "class_room_registrations#student_registration", as: :student_registration 
     end 
     end 
    end 
    get '/fetch_subject_teachers' => 'class_room_subjects#fetch_subject_teachers', as: :fetch_subject_teachers 
    resources :schools, :path => '/', only: [:index, :edit, :show, :destroy, :update] do 
     collection do 
     get :change_password 
     patch :update_password 
     get :edit_profile 
     patch :update_profile 
     get :listing 
     get :view_ids 
     match "/upload_ids" => "schools#upload_ids", via: [:get, :post] 
     get :autocomplete_school_name 
     get '/view_lesson_plan/:id' => "schools#view_lesson_plan", as: :view_lesson_plan 
     end 
     member do 
     get :students 
     get :teachers 
     get :lesson_plans 
     match '/class_rooms' => "class_rooms#index", via: [:get, :post] 
     end 
    end 
    end 

    resources :friend_requests do 
    member do 
     get '/send_friend_request/:type' => "friend_requests#send_friend_request", as: :send_friend_request 
     get '/decline_friend_request/:type' => "friend_requests#decline_friend_request", as: :decline_friend_request 
     get '/accept_friend_request/:type' => "friend_requests#accept_friend_request", as: :accept_friend_request 
     get '/cancel_friend_request/:type' => "friend_requests#cancel_friend_request", as: :cancel_friend_request 
     get '/unfriend' => "friend_requests#unfriend", as: :unfriend 
    end 
    collection do 
     get :friend_requests 
    end 
    end 

    namespace :student do 
    resources :students, :path => '/' do 
     member do 
     get :friends 
     get :lesson_plan_progress 
     post "/join_private_school/:school_id" => "students#join_private_school", as: :join_private_school 
     get "/private_schools" => "students#private_schools", as: :private_schools 
     end 
     collection do 
     get :departments 
     post :select_departments 
     get :list_departments 
     get :my_lesson_plan 
     get :special_lesson_plans 
     end 
     get '/view_result/:id' => "students#view_result", as: :view_result 
     get '/lesson_plan/:id' => "students#lesson_plan", as: :lesson_plan 
     get '/video/:id' => "students#video", as: :video 
     post '/video_comments/:id' => "students#video_comments", as: :video_comments 
     get '/like_video/:id' => "students#like_video", as: :like_video 
     get '/liked_video_users/:id' => "students#liked_video_users", as: :liked_video_users 
     get '/is_video_completed' => "students#is_video_completed", as: :is_video_completed 
     get '/assignment_result/:id' => "students#assignment_result", as: :assignment_result 
    end 
    resource :users, :except => [:show, :index, :new, :create] do 
     member do 
     get :change_password 
     patch :update_password 
     end 
    end 
    end 

    namespace :teacher do 
    resources :teachers, :path => '/' do 
     resources :subjects do 
     resources :lesson_plans, :except => [:index] do 
      member do 
      get '/change_public' => "lesson_plans#change_public", as: :change_public 
      get '/change_private' => "lesson_plans#change_private", as: :change_private 
      post '/copy_lesson_plan' => "lesson_plans#copy_lesson_plan", as: :copy_lesson_plan 
      get '/play_list_progress' => "lesson_plans#list_play_list_progress", as: :list_play_list_progress 
      end 
      resources :lesson_plan_registrations, :only => [:new, :create, :edit, :update] 
      post '/move_up_down_play_list' => 'lesson_plans#move_up_down_play_list', as: :move_up_down_play_list 
      resources :comments, only: [:new, :create, :destroy] 
      resources :videos do 
      member do 
       get '/like_video' => "videos#like_video", as: :like_video 
       get '/liked_video_users' => "videos#liked_video_users", as: :liked_video_users 
       get '/delete_video_comment' => "videos#delete_video_comment", as: :delete_video_comment 
       get '/is_video_completed' => "videos#is_video_completed", as: :is_video_completed 
       post '/copy_video' => "videos#copy_video", as: :copy_video 
      end 
      end 
      resources :documents do 
      member do 
       get '/download_file' => "documents#download_file", as: :download_file 
       get '/like_document' => "documents#like_document", as: :like_document 
       get '/liked_document_users' => "documents#liked_document_users", as: :liked_document_users 
       post '/copy_document' => "documents#copy_document", as: :copy_document 
      end 
      end 
      resources :notes do 
      member do 
       get '/like_note' => "notes#like_note", as: :like_note 
       get '/liked_note_users' => "notes#liked_note_users", as: :liked_note_users 
      end 
      end 
      resources :quizzes do 
      member do 
       get '/like_quiz' => "quizzes#like_quiz", as: :like_quiz 
       get '/liked_quiz_users' => "quizzes#liked_quiz_users", as: :liked_quiz_users 
       match '/change_public' => "quizzes#change_public", as: :change_public, via: [:get, :post] 
       get '/give_quiz' => "quizzes#give_quiz", as: :give_quiz 
       get '/preview_quiz' => "quizzes#preview_quiz", as: :preview_quiz 
       post '/copy_quiz' => "quizzes#copy_quiz", as: :copy_quiz 
      end 
      resources :questions do 
       collection do 
       get '/fetch_question_options' => 'questions#fetch_question_options' 
       match '/search_questions' => 'questions#search_questions', as: :search_questions, via: [:get, :post] 
       post '/select_questions' => 'questions#select_questions', as: :select_questions 
       end 
      end 
      resources :question_groups 
      resources :sort_questions, only: [:index] 
      post '/move_up_down' => 'sort_questions#move_up_down', as: :move_up_down 
      resources :quiz_answers, only: [:new, :create] 
      resources :quiz_attempts do 
       member do 
       get '/download_file' => "quiz_attempts#download_file", as: :download_file 
       end 
      end 
      end 
      resources :question_banks do 
      member do 
       get :fetch_picks 
      end 
      resources :sort_questions, only: [:index] 
      resources :questions do 
       member do 
       post :move 
       end 
       collection do 
       get '/fetch_question_options' => 'questions#fetch_question_options' 
       end 
      end 
      end 
      resources :assignments do 
      member do 
       match '/change_public' => "assignments#change_public", as: :change_public, via: [:get, :post] 
       get '/like_assignment' => "assignments#like_assignment", as: :like_assignment 
       get '/liked_assignment_users' => "assignments#liked_assignment_users", as: :liked_assignment_users 
       get '/download_file' => "assignments#download_file", as: :download_file 
       post '/copy_assignment' => "assignments#copy_assignment", as: :copy_assignment 
      end 
      resources :assignment_submissions do 
       member do 
       get '/download_file' => "assignment_submissions#download_file", as: :download_file 
       post '/mark_assignment' => "assignment_submissions#mark_assignment", as: :mark_assignment 
       end 
      end 
      end 
     end 
     end 
     resources :lesson_plans do 
     resources :videos 
     resources :documents 
     resources :notes 
     resources :quizzes do 
      member do 
      match '/change_public' => "quizzes#change_public", as: :change_public, via: [:get, :post] 
      get '/preview_quiz' => "quizzes#preview_quiz", as: :preview_quiz 
      end 
      resources :questions 
      resources :quiz_attempts do 
      member do 
       get '/download_file' => "quiz_attempts#download_file", as: :download_file 
      end 
      end 
     end 
     resources :question_banks 
     resources :assignments 
     end 
     resources :class_rooms, :only => [:index] do 
     resources :subjects do 
      resources :subject_grades, only: [:index] do 
      collection do 
       get "/mark_complete" => "subject_grades#mark_complete", as: :mark_complete 
      end 
      end 
      resources :class_room_subjects, only: [:update] 
      resources :lessons do 
      resources :attendances, only: [:index] 
      end 
     end 
     end 
     resources :private_schools do 
     resources :invitation_promo_codes 
     resources :private_classes do 
      member do 
      get :new_private_lesson_plan 
      post :create_private_lesson_plan 
      get "/edit_private_lesson_plan/:private_lesson_plan_id" => "private_classes#edit_private_lesson_plan", as: :edit_private_lesson_plan 
      post "/update_private_lesson_plan/:private_lesson_plan_id" => "private_classes#update_private_lesson_plan", as: :update_private_lesson_plan 
      get "/destroy_private_lesson_plan/:private_lesson_plan_id" => "private_classes#destroy_private_lesson_plan", as: :destroy_private_lesson_plan 
      end 
     end 
     end 
     member do 
     get :friends 
     get '/lesson_plans' => "lesson_plans#index", as: :lesson_plans 
     get '/my_class_rooms' => "class_rooms#index", as: :my_class_rooms 
     get :new_promo_code 
     post :create_promo_code 
     post :leave_private_school 
     end 
     collection do 
     get :departments 
     post :select_departments 
     get '/:teacher_id/invitation_promo_codes' => "invitation_promo_codes#index", as: :invitation_promo_codes 
     end 
    end 
    resource :users, :except => [:show, :index, :new, :create] do 
     member do 
     get :change_password 
     patch :update_password 
     end 
    end 
    end 
    get '/notifications' => 'users#notifications', as: :notifications 
    delete '/delete_notification/:id' => 'users#delete_notification', as: :delete_notification 
    get '/notification_status' => 'users#notification_status' 
end 
+0

あなたはあなたの完全な 'routes.rb'を表示することができますか? – Thanh

+0

@ThanhHuynh 'routes.rb'ファイルの内容を追加しました。それを見直してください。ありがとう。 – LearningROR

+0

あなたは私の答えを試すことができますか? – Thanh

答えて

2

あなたのルートでこれを試すことができます:ここで

はフルroutes.rbをファイルがある

def lesson_plans 
    resources :lesson_plans, :except => [:index] do 
    resources :lesson_plan_registrations 
    resources :comments, only: [:new, :create, :destroy] 
    end 
end 

resources :subjects do 
    lesson_plans 
end 

lesson_plans 
+0

私の神...... ......恐ろしい....私はそれがいかに簡単だったか信じられません:)あなたは本当に私の日を..... .....作ってくれてありがとう.. どうしたのですか? ruby docのガイドは? – LearningROR

+0

@LearningROR、Rubyコードです:)。それがうまくいくなら、私の答えは受け入れてください。 – Thanh

+0

はい、私はルートファイルにメソッドを書き込むかもしれないことを知りませんでしたので、私はそれを求めました。 :) – LearningROR

関連する問題