2009-03-05 2 views
2

이 문제로 인해 나를 죽이고 있습니다. Ryan Bates의 복잡한 형식을 가지고 놀았지만 문제는 해결할 수 없습니다.Rails 동적 다중 모델 양식 속성


Location has_many :targets 
Target has_many :target_classifications

모든 사항 페이지에 표시됩니다 : 나는이 스키마가 있습니다. 사용자는 jscript를 통해 동적으로 모든 위치에 대한 대상을 만들 수 있습니다. 그러면 위치 3 select (대상에 사용 가능한 분류 포함) 및 대상 값 아래에 테이블 행이 추가됩니다. 저장을 클릭하기 전에 원하는 위치에 대해 원하는 수의 대상을 만들 수 있습니다. 나는이 방법으로 fields_for 사용하고 있습니다 : 각 선택에 대한




이 코드가있는 target_partial를 렌더링하는 RJS를 사용하고 있습니다. sumbmitted 때,이 해시를 얻을 :

"new_targets"=> 
    {"7"=>[{"id"=>"13"}, {"id"=>"15"}, {"value"=>"67", "id"=>""}], 
    "4"=> 
    [{"id"=>"12"}, 
    {"id"=>"15"}, 
    {"value"=>"23", "id"=>""}, 
    {"id"=>"11"}, 
    {"id"=>"16"}, 
    {"value"=>"67", "id"=>""}]}, 

그래서,이 위치하여 각 대상 (이 경우 "7"과 "4")를 분리하지만, 각 대상을 구분하지 않습니다. 내가 원하는 것은 다음과 같습니다 :

 
"new_targets"=> 
    {"7"=>[ 
      {"target"=>[{"id"=>"13"}, {"id"=>"15"}, {"tonnes"=>"67"}]} 
     ], 
    "4"=>[ 
      {"target"=>[{"id"=>"12"},{"id"=>"15"},{"tonnes"=>"23"]}, 
      {"target"=>[{"id"=>"11"},{"id"=>"16"},{"tonnes"=>"67"]} 
     ] 
    } 

그래서 각 위치마다 각 대상을 반복 할 수 있습니다. field_for 메서드에서 새 [target] 중괄호를 추가 할 수는 없습니다.하지만 그 일은 내가하고 싶은 일입니다. 이견있는 사람?

답변

0

문제의이 종류는 여기에 설명되어 있습니다 :

http://wonderfullyflawed.com/2009/02/17/rails-forms-microformat/

그러나 레일 2.3 솔루션 (안 나를 위해 옵션)이 될 것으로 보인다. 그들은 사이트에 게시 한 것처럼 기본적으로,이 양식을 원하는 각 대상에 대한 고유 식별자를 만들 수

<input name="creator[widget_attributes][0][id]" /> 
<input name="creator[widget_attributes][0][name]" /> 
<input name="creator[widget_attributes][0][price]" /> 

<input name="creator[widget_attributes][1][id]" /> 
<input name="creator[widget_attributes][1][name]" /> 
<input name="creator[widget_attributes][1][price]" /> 

그냥 몇 가지 방법을 (또는이 경우, 위젯 속성) 내가 추가 할. jscript를 사용하여 새로운 대상을 추가하면 어렵습니다. 레일즈가 나를 위해 자동으로 이것을 할 수있는 방법이 있어야만합니다.

1

당신이 이것을하고 있는지 모르겠지만 fields_for를 사용할 때 객체 대신 문자열을 지정해야합니다. 부분적으로 가지고있는 코드를 볼 수 없으므로 나는 벗어날 수 있습니다. 어쨌든, 내가하는 일은 도우미에 있습니다 :

def fields_for_target(target, &block) 
    prefix = target.new_record? ? 'new' : 'existing' 
    fields_for("location[#{prefix}_target_attributes][]", target, &block) 
end 
+0

@ 브래드 : 잘 모르겠지만 fields_for의 이러한 "[]"은 원하는 것을 수행 할 것이라고 생각합니다. – klew

-1

Easy. 조회수는 accepts_nested_attributes_for입니다. :)

+0

레일즈 2.3은 지금 당장 나를위한 옵션이 아닙니다. 그래서 작동하지 않습니다. – brad