2015-08-07 3 views
0

Мне нужно установить флажок, исходящий от ответа пользователя на вопрос. Я написал код для обработки сохранения ответов, а метод с использованием «includes?» для установки значения true или false для опции «checked» check_box_tag. Однако check_box_tag отказывается отмечать флажок как истину, независимо от того, что я делаю. Я рассмотрел почти все вопросы и ответы, подобные моему вопросу, и ни один из ответов не сработал. Я упростил свой код на следующий вырезать, как многие из переменных я мог думать:check_box_tag не будет предварительно проверять

<% options.each do |option| %>  
    <%= check_box_tag "test", 1, true %> 
    <%= option.description %> 
<% end %> 

Флажки отображаются с описаниями опций, но флажок еще предварительно не проверяется. Есть ли что-то в этом, что мне не хватает?

инспектировать элементов показывает, что это:

*input checked="checked" id="test" name="test" type="checkbox" value="1"* 

Эта конкретная часть кода находится в частичной, где я прохожу в Params с помощью местных жителей (если это поможет).

Использование Rails 3.2 и рубин 1.9.3

Это аналогичный вопрос, но с collection_check_boxes How to pre-populate collection_check_boxes in an edit form?

Я ценю ваше время проверить это со мной =)

Edit 1 (добавление кода для контекста): Чтобы дать дополнительный контекст, мы имеем дело с вложенными формами ...

_multiple_choice_mr_for m.html.erb

<%= question_statement %> <br/> 

    <% response_choices.each do |choice| %> 
    <!--% raise choice.inspect %>--> 
    <!--% raise "#{Response.response_answered?(current_user.id, question_id)}  ~" + "question id: #{question_id}" %>--> 
    <!--% raise Response.multiple_answers_checked?(current_user.id, question_id, choice.description).inspect %>--> 
    <!--%= check_box_tag "response_#{question_id}_#{choice.id}".to_sym, choice.description, Response.multiple_answers_checked?(current_user.id, question_id, choice.description) %>--> 
    <%= check_box_tag "test", 1, true %> 
    <%= choice.description %> <br /> 

-> -> ->
->

Alot кода выше была опробована и каждый отдельный кусок кода работает так, как предполагалось ... Поэтому почему я просто разбил его на оригинальный пример.

_form.html.erb

<table> 
    <% @topic.topic_pages.order("sort_field asc").each do |topic_page| %> 
     <tr> 
     <h2><%= topic_page.title %></h2> 
     <% topic_page.page_sections.order("sort_field asc").each do |page_section| %> 
      <p> 

      <h3><%= page_section.title if page_section.title.present? %></h3> 
      <%= page_section.content.html_safe if page_section.content.present? %> 
      <%= page_section.instruction.html_safe if page_section.instruction.present? %> 
      <% if page_section.upload_material.present? %> 
       <%= image_tag page_section.upload_material.url %> 
      <% end %> 

      <% page_section.questions.order("question_order asc").each do |question| %> 
       <% if question.question_type == "No Response" %> 
        <%= question.question_statement %> <br /> 
       <% else %> 
        <%= render :partial => 'responses/online_document_responses/mulitple_choice_form', :locals => {:question_id => question.id, :question_statement => question.question_statement} if question.completed? %> 
        <%= render :partial => 'responses/online_document_responses/radio_button_form', :locals => {:question_id => question.id, :question_statement => question.question_statement, :response_choices => question.answer_choice_options} if question.scale? %> 
        <%= render :partial => 'responses/online_document_responses/open_response_form', :locals => {:question_id => question.id, :question_statement => question.question_statement} if question.open_response? %> 
        <%= render :partial => 'responses/online_document_responses/ranking_form', :locals => {:question_id => question.id, :question_statement => question.question_statement, :response_choices => question.answer_choice_options} if question.ranking? %> 
        <%= render :partial => 'responses/online_document_responses/multiple_choice_sr_form', :locals => {:question_id => question.id, :question_statement => question.question_statement, :response_choices => question.answer_choice_options} if question.multiple_choice_sr? %> 
        <%= render :partial => 'responses/online_document_responses/multiple_choice_mr_form', :locals => {:question_id => question.id, :question_statement => question.question_statement, :response_choices => question.answer_choices} if question.multiple_choice_mr? %> 
       <% end %> 
      <% end %> 
     <% end %> 
     </tr> 
    <% end %> 
</table> 

<div class="form-actions"> 
    <%= f.button :submit, value: "Save Responses" %> 
</div> 

** Редактировать (2) Добавление выходного HTML из инспектировать элемент:

<body id="gl"> 
    <div id="main" role="main"> 
    <div class="block" style="padding: 4em 1.25em;"> 
     <div class="g center"> 
     <div class="u100"> 
      <form accept-charset="UTF-8" action="/topics/2" class="simple_form edit_topic" id="edit_topic_2" method="post" novalidate="novalidate"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="_method" type="hidden" value="put"><input name="authenticity_token" type="hidden" value=“omitted"></div> 
      Mark all that apply! <br><input checked="checked" id="test" name="test" type="checkbox" value="1"> 
    one <br><input checked="checked" id="test" name="test" type="checkbox" value="1"> 
    two <br><input checked="checked" id="test" name="test" type="checkbox" value="1"> 
    three <br><input checked="checked" id="test" name="test" type="checkbox" value="1"> 
    four <br><input checked="checked" id="test" name="test" type="checkbox" value="1"> 
    five <br><input checked="checked" id="test" name="test" type="checkbox" value="1"> 
    six <br> 

      <div class="form-actions"> 
      <input class="btn" name="commit" type="submit" value="Save Responses"> 
      </div> 
     </form> <br> 
     </div> 
    </div> 
    </div> 
    </div> 
</body> 

Редактировать (3) пытались использовать пользовательские атрибуты:

Topic.rb

attr_accessor :response_statement_helper 

def response_statement_helper 
    true 
end 

И я передаю форму прямо сейчас в парциальное, чтобы позволить мне использовать пользовательский атрибут в пути некоторые из документации для простых форм показывает ...

_multiple_choice_mr_form.html.Еврорадио

-<%= check_box_tag "test", 1, true %> 
+<%= form.input_field :response_statement_helper, as: :boolean, boolean_style: :inline %> 

Это производит на выходе HTML:

<input boolean_style="inline" checked="checked" class="boolean optional" id="topic_response_statement_helper" name="topic[response_statement_helper]" type="checkbox" value="1"> 

Но дисплей флажков еще не отражает «галочка» значение.

Покушение редактировать (3) 's решение в отношении этого вопроса с ответом Gacha в: add checkbox with simple_form without association with model?

+0

Я думаю, вы могли бы устранить слишком много переменных в своем вопросе, потому что этот код работает для меня. Если я поставлю 3 экземпляра теста «<% = check_box_tag», 1, true%> 'в представлении моего приложения Rails (те же версии, что и у вас), я вижу 3 флажка в моем браузере, которые на самом деле проверены. –

+0

Кажется странным. 'checked =" checked "' правильно. Возможно, вы должны вставить точный html-вывод для флажков. – jphager2

+0

@Sean. Это проблема, хотя даже когда код упрощен к основам, он все еще не работает для меня ... Любые мысли о том, что еще может вызвать эту проблему? Возможно, это проблема с браузером (я использую хром, хотя я не уверен, что это так)? – HotShot3150

ответ

0

проверить это, ребята!

Я не знаю, почему это работает, и другие вещи, которые мы старались не сделали ... Но для simple_form_for, чтобы получить ваши флажки предварительно проверить сделать эту строку и синтаксис:

#for your code.... 
<%= form.input :your_attribute, :as => :boolean, input_html: {checked: true} %> 

#for my specific code I used 
<%= form.input "response_#{question_id}_#{choice.id}".to_sym, :as => :boolean, input_html: {checked: true} %> 

#My html output: 
<div class="input boolean optional topic_response_220_599"><input name="topic[response_220_599]" type="hidden" value="0"><input checked="checked" class="boolean optional" id="topic_response_220_599" name="topic[response_220_599]" type="checkbox" value="1"><label class="boolean optional control-label" for="topic_response_220_599">Response 220 599</label></div> 

Благодаря все, кто дал их вход =)

Смежные вопросы