2013-01-11 3 views
0

"많은"모델 객체 중 하나를 생성 할 때 일대 다 관계로 외래 키를 성공적으로 할당하는 데 어려움이 있습니다.레일즈 - 두 개의 관련 모델 객체 사이에서 항목 생성시 외부 ID 할당

더 구체적으로 ... 나는 두 가지 모델, CourseSection을 가지고있는 코스has_many :sections, 각 belongs_to :course. 각 속성 에는 외래 키 course_id이 있습니다.

내가 내 create 함수를 작성할 때 자동으로 작성시 외부 키 course_id를 할당합니다 current_course.sections.build(params[:section])를 작성할 수 있도록 current_course라는 헬퍼 메소드를 작성하고 싶습니다. 즉, current_course은 클릭 한 클래스의 ID (즉, /class/1/)를 새로 작성한 섹션의 course_id과 동일하게 만듭니다. 나는 @current_course ||= Course.find(params[:course_id])의 라인을 따라 시도했지만 .. 생성시 ID 오류가 계속 발생합니다. 무엇이 잘못 되었습니까? current_course 방법을 어떻게 수정합니까? 감사!

답변

0

당신이하고있는 일은 기본적으로 정확합니다.

create 컨트롤러에는 일반적으로 처음에는 이와 같은 행이 있습니다. (당신은 결국 만들어지지 않은 무언가를 찾을 수 없습니다.)

@course = Course.new(params[:course]) 

을 당신이 정확히 하나의 Section을 구축 할 거라고 알고 있다면, 당신은 당신의 new 컨트롤러 @course.sections.build 작업을 수행 할 수 있습니다. 그런 다음 여기에서 Courses 모델 accepts_nested_attributes_for :sections을 확인한 다음 기능으로보기에서 Section 필드를 채울 수 있습니다. 이런 식으로하면 컨트롤러가 간단히 @course.save이라고 말하면 Section이 함께 저장됩니다.

도움이 되었길 바랍니다. 표시되지 않는 경우 표시되는 오류와 함께 의견을 추가하십시오.

+0

감사합니다. 사용자가 각 코스에 맞는 여러 섹션을 만들 수 있기를 기대할 수 있으므로 위의 내용이 완전히 적용될 수 있는지 확실하지 않습니다. 당신은 중첩 된 속성에 대해 언급했고 중첩 된 자원 ('/ course/1/section/2'와 같은 좋은 경로)을 생각했지만 궁극적으로 my ** Section ** 모델에 대해 외래 키를 가지고 있기 때문에 '/ section/2'를 보여줄 수 있고 id = 1로 본질적으로 연결되어 있어야합니다. 하나의 대안은 컨트롤러간에 정보를 전달하는 것입니다 : 세션, 더 좋은 방법이 있는지 궁금해하고 있습니까? – daspianist

+1

중첩 된 속성은 중첩 된 경로와 매우 다르며, 기본적으로'Course'와 연결될'Section'을 나타내는 해시 배열을 취하는'@core.sections_attributes = '함수를 제공합니다. 컨트롤러가 얼마나 깨끗한지를 알아 보는 것이 유익하지만,': session' 저장소는 크기가 다소 제한되어 있으므로, 그것을 통과시키는 것은 일반적으로 좋은 생각이 아닙니다. – Geoff