2013-01-14 2 views
0

School, CourseSection의 세 모델이 있습니다. 모두가 일대 다 관계에 있습니다 (학교 has_many 코스, 및 코스 has_many 섹션, 해당 belongs_to 관계도 모델에 설정 됨). 또한 다음과 같은 리소스 (제외 나중에 설정해야합니다)이 : 중첩 된 자원의 일부로서 작동 할 수'새로운'방법을 쓸 때

resources :schools do 
    resources :courses 
    end 
    resources :sections #not part of the nest 

sections 있지만, 나는 단지 하나의 레이어 깊은 Rails guide 권장 둥지 이후를 유지했다. 이 (SectionsController에서) 새 섹션을 생성에 관해서, 그것은 항상 "할 수 없습니다 올릴 것 course_id

def new 
    @course = Course.find(params[:id]) #this line results in an error 
    @section = @course.sections.new 
    end 

첫 번째 라인을 통해 과정에 연결 한 경우

그래서, 내 문제입니다 id : : course_id, 등등을 사용하는 다양한 조합을 시도해 보았음에도 불구하고 과거에 얻을 수없는 "ID없는 코스 찾기"오류가 발생했습니다. Course은 중첩 된 리소스이므로 누락 된 것이 있습니까? 당신의 도움을 주셔서 감사합니다!

rake routes를 실행, 여기에 출력됩니다 :

  sections GET /sections(.:format)       sections#index 
        POST /sections(.:format)       sections#create 
     new_section GET /sections/new(.:format)      sections#new 
    edit_section GET /sections/:id/edit(.:format)     sections#edit 
      section GET /sections/:id(.:format)      sections#show 
        PUT /sections/:id(.:format)      sections#update 
        DELETE /sections/:id(.:format)      sections#destroy 
    school_courses GET /schools/:school_id/courses(.:format)   courses#index 
        POST /schools/:school_id/courses(.:format)   courses#create 
new_school_course GET /schools/:school_id/courses/new(.:format)  courses#new 
edit_school_course GET /schools/:school_id/courses/:id/edit(.:format) courses#edit 
    school_course GET /schools/:school_id/courses/:id(.:format)  courses#show 
        PUT /schools/:school_id/courses/:id(.:format)  courses#update 
        DELETE /schools/:school_id/courses/:id(.:format)  courses#destroy 
      schools GET /schools(.:format)        schools#index 
        POST /schools(.:format)        schools#create 
     new_school GET /schools/new(.:format)       schools#new 
     edit_school GET /schools/:id/edit(.:format)     schools#edit 
      school GET /schools/:id(.:format)       schools#show 
        PUT /schools/:id(.:format)       schools#update 
        DELETE /schools/:id(.:format)       schools#destroy 
       root  / 
+0

'rake routes'를 실행하고 결과를 질문에 추가하십시오. – weltschmerz

+0

출력 추가 - 감사합니다. – daspianist

답변

1

당신의 과정은 학교와 중첩되기 때문에,이

모델이 있어야한다 시도

class School < ActiveRecord::base 
    has_many :courses 
end 

class Course < ActiveRecord::base 
    belongs_to :school 
end 


def new 
    school = School.find(params[:school_id]) 
    @course = school.courses.new 
    #your code 
end 
더 많은 아이디어를 얻을 수

달리기에 의한이 라우팅에 대해

HTH

+0

불행히도 그것은 작동하지 않았다. (내가 새로운 섹션에 대해'new'를 작성하는 것을 의미한다고 생각한다. 문제는 내가 문제가되어서 코드를 바꿨다. :)). 사실 저는'params [: course_id]'를 사용해 보았습니다. 그러나 여전히 "ID없는 코스를 찾을 수 없습니다"와 같은 오류를줍니다. – daspianist

+0

안녕하세요, 매개 변수를 인쇄하고 당신이 무엇을 얻는 지 알 수 있습니까? – sameera207

+0

불행히도 저는 그걸 멀리까지 가질 수 없습니다. 컨트롤러에서 @dummy = Course.find (params [: school_id])라는 더미 변수를 보여 주려고했지만 "ID가없는 코스를 찾을 수 없습니다"라는 오류가 발생했습니다. 이것이 도움이된다면, "add ** new ** section"링크가 여기에 위치합니다 :'/ schools/1/courses/2','/ sections/new'로 이동합니다. params에서 ID를 찾을 수없는 새 URL로 이동 했습니까? 만약 그렇다면 어떻게 여전히 새로운'SectionsController'에 정보를 전달할 수 있습니까? 다시 한 번 감사드립니다! – daspianist

1

당신은 당신이 섹션 컨트롤러에서는 물론

바인딩 그들에게 절을 얻을 수

{:School_id=> some_id, :course_id=>some_id} 

그래서 새로운 섹션 요청이 PARAMS이 필요

def new 
    @school = School.find(params[:school_id]) 
    @course = @school.courses.where(:id=>params[:course_id]).first 
    @section = @course.sections.new 
    end 

이 치료할 수 있기를 바랍니다 :)