2011-03-04 5 views
0

Track이라는 has_many : trough라는 이름의 어소시에이션 모델 앨범이 있습니다. 기본적으로 앨범에는 여러 개의 트랙이있을 수 있지만 트랙은 동시에 두 개 이상의 앨범에 속할 수 있습니다 (따라서 연관성 "트랙리스트"를 통해). 레일 3은 (전체 컬렉션 대신) 새 모델에 대한 accepts_nested_attributes_for 형식을 사용합니다.

나는 그와 같은 모든 트랙의 속성을 끈다 (formtastic의 도움으로) 형태와 편안하고 응용 프로그램이 너무

form.semantic_fields_for :tracks do | builder | 
    builder.fields 
end 

양식은 연관된 모든 트랙 '필드를두고 내가 그들을 업데이트 할 수 있습니다 좋아요, 모든 것이 작동합니다.

이제 기존 앨범에 새 트랙을 추가하는 또 다른 시각을 갖고 싶습니다. 이보기에서 기존 트랙에 대한 모든 입력 필드를 렌더링하지 않고 만들고자하는 새 연결에 대한 필드 만 렌더링하려고합니다.

나는이 작업을 수행하는 방법에 대한 정보를 찾기 위해 노력했다, 내가 가지고 올 것 중에 최고입니다

form.semantic_fields_for :tracks, Track.new do | builder | 
    builder.fields 
end 

이 트랙 입력의 단일 세트를 출력, 필요한처럼, 내가 제출할 수 있습니다 양식 및 트랙이 생성되어 제품과 연관됩니다. 단, 유효성 검증 오류가없는 경우에만 가능합니다.

문제는 유효성 검사와 함께 제공됩니다. 하나가 실패하면, 응용 프로그램은 다시 같은 뷰를 렌더링하지만, 모든 입력 (유효하거나 모든 데이터가 손실되고, Formtastic에 대한 인라인 오류 메시지는 사라) 다시 비어 :

form.semantic_fields_for :tracks, Track.new do | builder | 
     builder.fields 
end 

I 데이터 및 오류 메시지가있는 요청 매개 변수에 이미 개체가 있지만 Track.new를 수행하기 때문에 이것이 원인이라고 생각하십시오. 물론 이것은 좋지 않습니다. 내가 갖고 싶은 것은 Formtastic 오류 메시지뿐만 아니라 이미 입력 된 데이터로 표시된 단일 트랙의 형식입니다.

내가 뭘 잘못하고 있니? 대신

Track.new 

답변

0

당신은 컨트롤러에

@track = @album.tracks.build 

를 설정하고 그것을 사용해야합니다. 그것은 유효성 검사 오류를 통해 필드를 보존해야합니다.

0

해결책을 찾았습니다. 그것은 작동하지만, 그것이 좋은 해결책인지 궁금해. 저를 올바른 길로 인도 해준 Srdjan에게 감사드립니다!

@track = @album.tracks.build 

form.semantic_fields_for :tracks, @track do | builder | 
    builder.fields if builder.object.new_record? 
end 

분명히 새 레코드의 양식 필드 만 렌더링합니다.