2013-09-08 3 views
0

내 응용 프로그램에서 일부 의사 '에 속한'이 함께 '의 속성을 중첩 수락' 사악한 보석. 1 단계에서는 프로젝트를 만들고 저장합니다.레일은 관계

= form_for @project do |f| 
    = f.fields_for :video_attributes do |v| 
    = v.file_field :file 

모든 것이 잘 작동하지만 나는이 같은 단계에서 프로젝트의 사용자에게 제품을 추가 할 : 두 번째 단계에서는 그 프로젝트에 비디오를 추가 할 수 있습니다. 나는 이런 종류의 일을 위해 중첩 된 속성을 받아들이는 방법에 대해 다소 혼란 스럽다.

@user = current_user 
# wicked makes us use :project_id as it hijacks :id 
@project = @user.projects.find(params[:project_id]) 
@user.products.build 

을하지만이 '에 대한 중첩 된 속성'을 고수 할 경우 전화 :

나는 내 사악한 컨트롤러 같은 것을 할 필요가 상상? accepts_nested_attributes_for에 둘 이상의 호출이 필요합니까? 이게 효과가 있니?

Make Project model accept nested attributes for User 
Make User model accept nested attributes for Product 

= form_for @product do |f| 
    = f.fields_for :user_attributes do |u| 
    = u.fields_for :product_attributes do |p| 
     = p.file_field :image 

내가 밖으로 내일까지 코드를 시도 할 수는 없지만, 나는 그것을 얻을 때 나는이 문제를 해결 할 수 있습니다 알고 잠이 잘됩니다.

답변

1

fields_for 호출을 중첩하여 여러 객체를 통해 중첩 된 특성을 확장 할 수 있습니다 ...하지만 여기로 향하는 것처럼 보이는 것처럼 개체간에 앞뒤로 이동하면 때때로 문제가 발생할 수 있습니다. 그런 구조에서 생기는 순환 저장 문제에 문제가있었습니다. 따라서 accepts_nested_attributes_for은 편도로 유지하는 것이 좋습니다. 따라서 사용자가 프로젝트에 대해 _nested_attributes_를 수락하면 프로젝트는 사용자에게 accepts_nested_attributes를 허용하지 않아야합니다. 이 경우 루트 객체를 기반으로 양식을 작성해야합니다. 나는 당신의 프로젝트를 알지 못한다. 그러나 나의 것이었다. 기본적으로 사용자가 중심 관계가 될 가능성이 큽니다. 희망이 도움이됩니다.

또한 fields_for 호출이 <some object>_attributes을 사용하는 이유가 확실하지 않습니다. 특별한 것을하지 않는 한, 그것들은 f.fields_for :video과 같은 관계 이름이어야합니다. 이렇게하면 fields_for 호출이 컬렉션의 해당 유형의 각 객체를 반복합니다.