2016-06-21 2 views
0

세 가지 모델 인 "설문 조사", "질문"및 "답변"을 만들었습니다. 설문 조사 has_many 답변 has_many 질문 (그리고 그들 모두 위의 모델에 속하는). 레일스 라디오 버튼이 제대로 작동하지 않음 및 관련 문제

내가 질문을 표시하여 사용자 입력을 제출하려는 형태 :

  1. 좀 더 이상의 질문을 작성하는 경우에 : 그것으로 몇 가지 문제가있다

    <%= form_for(:quiz_responses, url: quiz_responses_path) do |f| %> 
    
    <%= f.hidden_field :name, value: @survey.name %> 
    
    <% @questions.each do |question| %> 
    <ul> 
    <%= f.hidden_field :question, value: question.content %> 
    <%= f.label question.content %> 
    
    <% question.answers.each do |answer| %> 
    
    <%= f.hidden_field :answers, value: answer.content %> 
    
    <%= f.label answer.content %> 
    <%= f.radio_button(:user_answer, answer.content) %> 
    
    <% end %> 
    

    예 2 질문, 나는 8 개의 라디오 버튼, 각 질문 4 (의도 된 결과)를 얻을 것이다. 그러나 각 질문에 대해 4 개의 라디오 상자 중 하나가 아닌 8 개의 라디오 상자 중 하나만 선택할 수 있으며 :user_answer 값이 하나만 제출됩니다. 이 문제를 어떻게 해결할 수 있습니까?

  2. 이것은 대부분 # 1과 관련이 있지만 <%= f.hidden_field :answers, value: answer.content %>은 양식 (최종 답변 값)을 제출할 때 하나의 값만 생성합니다. 모든 답안 값을 제출하기를 원합니다. (질문이 2 개있는 경우, 1 대신 8 개의 답안 값을 포함하는 params 해쉬를 얻습니다). 비슷한 문제가 모두 8 개 개의 라디오 버튼은 이름 user_answer이 있기 때문이다 <%= f.hidden_field :question, value: question.content %>

+0

중첩 된 필드에 대해 알아 보려면 다음 두 링크를 참조하십시오. http://railscasts.com/episodes/196-nested-model-form-part-1, http://railscasts.com/episodes/197-nested -model-form-part-2. 내 생각에 그건 네가 맞아. –

+0

나는 분명히해야만했다. 설문지를 만들 때 양식에 중첩 필드를 사용했습니다. 위에 게시 한 양식은 설문 조사를 만든 후 사용자 입력을위한 설문 조사를 게재하는 것입니다. 중첩 된 양식이 최선의 방법인지는 잘 모르겠습니다. –

+0

설문 조사를 저장했다면 왜 그것을 표시하기 위해 form_for가 필요합니까? 여기서 달성하고자하는 것이 무엇인지 명확하지 않지만 중첩 된 형식이 없으면 필드 나 다른 것에 대한 중복 ID를 얻을 가능성이 큽니다. 나는 아직도 그 철도 사고를 지켜 보라고 조언합니다. 이 웹 사이트는 초보자에게 매우 유용합니다. –

답변

0

귀하의 1로 발생한다. 각 그룹의 이름이 다른 것인지 확인해야합니다 (예 : 질문 ID 포함). 어쩌면 "user_answer[#{q.id}]" 백 엔드에서 해시를 얻을 수 있습니다.

2의 경우 브라우저가 실제로 8 개의 값 (인스펙터의 네트워크 탭에서 확인할 수 있음)을 실제로 전송할 것으로 예상되지만 레일스는 매개 변수를 처리하는 방법 때문에 하나만 제공합니다. 다시 말하지만 각 숨겨진 필드에 고유 한 이름이 있어야합니다 (이번에는 질문 ID와 답변 ID를 결합해야합니다).

+0

안녕하세요, 답변 주셔서 감사합니다. 나는 그것을 고칠 수 있었다. 그러나 각각의 답안과 질문을 대신 주문하는 방법이 있습니까? 예를 들어, <% = f.hidden_field "응답을 내 데이터베이스에 저장했기 때문에 value : answer.content %>는 응답 해시를 제공 할 것입니다. 뭐든 첫 번째 대답에서. 나는 그 (것)들을 그 대신에 [# {answer_counter}] 응답하도록 바꾸고 그 선을 달린 후에 answer_counter를 증가 시켜서 0에서 시작하는 것을 처리했다 그러나 일종의 ... 같지 않다. –

+0

''요소를 만들고 있기 때문에 원하는대로 할 수 있으며 2016 년에도 HTML과 "CGI"만 있습니다. 그러나 특정 매개 변수 이름을 사용하면 레일스가 'foo [bar]'와 같은 "마법"을 사용할 수 있으므로 가능한 경우 해당 매개 변수를 사용하는 것이 좋습니다. ('bar'가 id 일 필요는 없습니다.) 또한 count를 증가 시키면'each' 대신'each_with_index'를 시도해보십시오. –

관련 문제