나는 미리 정의 된 질문과 이러한 질문에 모두 대답해야하는 사용자가있는 모음집을 가지고 있습니다. 따라서보기는 다음과 같아야합니다.답변 목록에있는 양식 표시
= form_for @user do |f|
-#some code and then...
%table.table
- @questions.each do |q|
%tr
%td=q.name
%td
%input-# Here the answer of the user for the question 'q'
따라서보기에는 각 질문에 대한 각 사용자 응답도 표시되어야합니다. 내 문제는 첫 번째 인스턴스에 어떤 대답이 없을 것을, 그래서 같은 것을 사용하지 수 : 아무것도 표시하지 않도록 어떤 답변도하지 않습니다이 경우
= form_for @user do |f|
-#some code and then...
%table.table
- @user.answers.each do |answer|
= f.fields_for :answers, answer do |a|
%tr
%td= answer.question.name
%td=a.number_field :result
합니다. 답변이있을지라도 모든 질문을 사용자에게 보여줘야합니다. 빈 값을 사용하여 응답을 미리 초기화 할 수는 있지만 빈 값만있는 레코드를 많이 갖고 싶지는 않습니다. 대부분의 질문은 사용자가 대답하지 않을 수도 있습니다. 또 다른 질문은 순서가 있고 나는 @user.answers.each
루프 (예, 쿼리를 수정할 수 있으므로 정렬 될 수 있지만, 뭔가를 위해 너무 많이 조정할 것입니다.)로 정렬 할 방법을 모른다는 것입니다. .단순한?). 일반적으로 메인 루프는 이고 @user.answers.each
이 아야합니다.
필자는 필드를 수동으로 생성하는 것과 같이 몇 가지 불쾌한 방법으로 생각했습니다. 여러 가지 if/else 조건이 있지만 레일이이를 수행 할 수있는 확실한 방법을 원합니다. 누군가가 전에 이런 문제를 겪었습니까? 그렇게 할 수있는 다른 방법은 없지만 맞춤 헬퍼를 사용하여이 모든 것을 만들 수 있습니까? 컨트롤러에서
%table.table
- @questions.each_with_index do |q, i|
%tr
%td= q.name
%td
- answer = @user.answers.detect{|a| a.question.try(:id) == q.id}
= number_field_tag "user[answers_attributes][#{i}][result]", (answer && answer.result)
= hidden_field_tag "user[answers_attributes][#{i}][id]", (answer && answer.id)
= hidden_field_tag "user[answers_attributes][#{i}][question_id]", q.id
, 다음 줄에, 청소에 충분했다 : 끝에서 미리
업데이트
감사드립니다, 감사 @saverio 대답에, 나는 다음과 같이 왼쪽 모든 비어있는 값 :
params[:user][:answers_attributes].delete_if{|k,v| v[:result].blank? && v[:id].blank?}
도움을 주셔서 감사합니다. –
당신을 진심으로 환영합니다! – rewritten