2011-05-15 3 views
0

이렇게 부울 정렬 선택 방법과 양식 필드 자체를 구성하는 방법에 대한 질문입니다.몽고 이드, 부울 양식 필드

field :wizard, type: Boolean 
field :archer, type: Boolean 

을 그들은 단지 하나 또는 다른이 될 수 그러나 예를 들어 가입 사용자는 내가해야 같은, (및 데모 용) "마법사"또는 "사수"와 같은 팀을 선택하는 경우 그래서 라디오 필드로 양식을 구성하여 사용자가 하나만 선택할 수 있도록하려면 어떻게해야 제대로 할 수 있을지 모르겠다. 내 양식에서 이렇게 말하면 좋을지 모른다 :

<p><%= f.label "wizard" %><%= radio_button(:user, :wizard, "True") %></p> 
<p><%= f.label "archer" %><%= radio_button(:user, :archer, "True") %></p> 

하지만 원하는만큼 항목을 선택할 수 있기 때문에이 방법이 효과가 없습니다. 사용자가 둘 이상의 라디오 선택을 선택하지 못하게하려면 어떻게해야합니까?

답변

1

HTML의 여러 필드에서 라디오 버튼이 작동하지 않습니다. 사용자가 하나만 선택할 수 있도록 관련되도록하려면 이름 속성에 대해 동일한 값을 가져야합니다. 당신의 이름 값은 "user.wizard"와 "user.archer"로 생성됩니다. 당신은 같은 필요 :

<p><%= f.label "wizard" %><%= radio_button(:user, :role, "wizard") %></p> 
<p><%= f.label "archer" %><%= radio_button(:user, :role, "archer") %></p> 

을하고 적절하게 부울 필드를 설정하기 위해 선택한 역할을 뽑고 모델에서 코드가 있습니다.

전반적으로 데이터 모델을 변경하여 문자열 필드로 역할을하거나 표준화하고 role_id를 실제 필드로 만들어 실제 역할을 포함하는 별도의 테이블 (사용자 belongs_to : role, 역할 has_many : users). 그런 식으로 새 역할을 추가하면 코드를 변경할 필요가 없으며 테이블에 행을 추가하기 만하면됩니다. 사용자 모델 (예 : user.is_wizard?)에 여전히 부울 메소드가있을 수 있지만 역할에 따라 계산됩니다.

관련 문제