2009-08-08 5 views
0

제 질문이 이해할 수 있기를 바랍니다. 그렇지 않으면 명확히 밝힙니다.레일에 까다로운 루비 문제가 있습니다. 쉬운 해결책이 있습니까?

우리는이 스포츠 경기가 열리 며, 나는 사람들을 등록하게되어 기쁩니다. :)

사실 :

  • 하나는 5-10 사람의 팀을 보유하고 있습니다.
  • 사람들이 시작하는 순서를 알아야합니다.
  • 팀 리더가 누구인지 알아야합니다.

나는 한 다음 스타일에서 양식 :

  1. o [____Write first name here___]<은 --- 이것은 텍스트 필드
  2. o [____Write second name here__]
  3. o [___________ ... ____________]
  4. 에게 ...입니다

"o"는 라디오 버튼이며 팀 리더를 고르는 데 사용됩니다.

모델 사람과 모델 입니다. 모든 팀은 leader_id (이는 개인 ID 중 하나임)입니다. 또한 모든 팀 :has_many 명.

<input id="team_leader_id_**????**" 
     name="team[leader_id]" 
     type="radio" 
     value="**????**" 
/> 

<input id="team_leader_id_**????**" 
     name="team[leader_id]" 
     type="radio" 
     value="**????**" 
/>  
# etc. 

내 질문 : 컨트롤러에서

나는 (라디오 - 버튼에) 가지고있는보기에서

def create 
    @team = Team.new(params[:team]) 
    @team.save #just assume there are no errors 
end 

는이 내가 **????**에 넣어해야합니까?

아직 작성되지 않았기 때문에 아직 사람들의 ID를 알 수 없습니다. 레일에있는 루비가 모든 것을 올바르게 인식하고 링크시키는 메타 ID를 거기에 두어야합니까?

당신은

으로 그 순간에 내가 못생긴 해킹을하고 있어요 말했다 (그것은 내가 사용하고 해킹에 대해 설명) 나머지 부분을 읽어 필요가 없습니다 : 생성하지 않고 (먼저 팀을 저장을 지도자), 다음의 DB에서 같은 팀을 가져 그 사람을 얻고,

params[:team][:leader_id]. 

마지막으로 팀의 leader_id 분야에서이 사람의 ID를 저장하는 값과 일치하는 첫 번째 사람을 찾을 수 있습니다.

그러나이 코드는 비효율적이며 거대하고 버그가있어서 더 쉬운 방법이라고 생각합니다.

답변

2

라디오는 동일한 이름이어야합니다.

<input id="team_persons_attributes_0_leader_id" 
     name="team[persons_attributes][leader_id]" 
     type="radio" 
     value="0" 
/> 
<input id="team_persons_attributes_1_leader_id" 
     name="team[persons_attributes][leader_id]" 
     type="radio" 
     value="1" 
/> 
<input id="team_persons_attributes_2_leader_id" 
     name="team[persons_attributes][leader_id]" 
     type="radio" 
     value="2" 
/> 

이 방법 만이 지도자의 이름이됩니다 params[:team][:persons]에 인덱스를 포함합니다 (브라우저를 통해 내부 라디오 버튼 메커니즘)을 선택 하나 params[:team][:persons_attributes][:leader_id]이있을 수 있습니다.

당신이 그들 중 하나가 팀 리더로 플래그와 함께 한 번에 많은 사용자를 제출하는 것처럼 그것은 보인다 ID

team = Team.create(params[:team]) 
params[:team][:persons].each_with_index{|name, idx| 
    person = Persons.create(:name => name) 
    #assuming no errors 
    team.leader_id = person.id if params[:team][:persons_attributes][:leader_id] == idx 
} 
+0

감사합니다. 내 게시물을 업데이트했습니다. 어리석은 실수, 문제가 남아 있습니다. :) – jacob

+0

그냥 명확히하기 위해 : 레일에 루비는 "가치"속성에 지정된대로 team.leader_id를 설정합니다. 예를 들어, 두 번째를 선택하면 "1"이 될 수 있습니다. 그러나 나는 그 필드에있는 사람의 ID를 가지고 싶습니다. – jacob

+0

params [: team] [: persons] [params [: team] [: persons_attributes] [: leader_id]] [: id] - 내 대답을 업데이트하여 자세히 설명하겠습니다. –

1

을 얻었다. ,

<%= radio_button_tag "[team][leader]","[1]" %> 
<%= radio_button_tag "[team][leader]","[2]" %>> 

그런 다음 컨트롤러에서 사람들 만들 단순히 팀 레코드의 선두 주자로 플래그 사람의 ID를 검색 (중첩 된 속성을 사용하여?) :이 경우 같은 것을 만들 수 있습니다.

+0

주셔서 감사합니다. – jacob