Рельсы представить флажок с соответствующим выбором - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть форма, которая отображает даты и время примерно так enter image description here

Код выглядит следующим образом:

 <%= f.fields_for :availabilities do |ff| %>
<% ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"].each do |day| %>
    <div class="row">
      <div class="col-md-4">
        <div class="ck-button">
          <label>
            <%= ff.check_box "day", {multiple: true, checked: @therapist.available_times.key?(day)}, day, false %>
            <span><%= day %></span>
          </label>
        </div>
      </div>
      <div class="col-md-4">
        <div class="answer">
          <%= ff.select "start_time", ["1 AM", "2 AM", "3 AM", "4 AM", "5 AM", "6 AM", "7 AM", "8 AM", "9 AM", "10 AM", "11 AM", "12 PM", "1 PM", "2 PM", "3 PM", "4 PM", "5 PM", "6 PM", "7 PM", "8 PM", "9 PM", "10 PM", "11 PM"], {:selected => (@therapist.available_times.key?(day) ? @therapist.available_times[day][:start] : '7' )} %>
        </div>
      </div>
      <div class="col-md-4">
        <div class="answer">
          <%= ff.select "end_time", ["1 AM", "2 AM", "3 AM", "4 AM", "5 AM", "6 AM", "7 AM", "8 AM", "9 AM", "10 AM", "11 AM", "12 PM", "1 PM", "2 PM", "3 PM", "4 PM", "5 PM", "6 PM", "7 PM", "8 PM", "9 PM", "10 PM", "11 PM"], {:selected => (@therapist.available_times.key?(day) ? @therapist.available_times[day][:end] : '17' )} %>
        </div>
      </div>
    </div>
  <% end %>

Когда я отправляюоднако при этом данные, отправляемые на мой контроллер, выглядят так:

"availabilities"=>{"start_time"=>"1 AM", "end_time"=>"1 AM", "day"=>["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]}

Что я действительно хочу, так это получить:

"availabilities"=>[{"start_time"=> "1 AM", "end_time"=>"1 AM", "day" => "Monday"},{"start_time"=> ...},...]

только для выбранных дней.

Со стороны диспетчера у меня есть разрешение, которое выглядит следующим образом:

:availabilities => [:day, :start_time, :end_time],

РЕДАКТИРОВАТЬ: я изменил multiple на false, и теперь моя доступность имеет желаемую форму, но я получаю толькопоследний проверенный, а не массив всех проверенных полей и связанных с ними времен

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Попробуйте этот код:

  <%= f.fields_for :availabilities do |ff| %>     
  <div class="row">
  <div class="col-md-4">
    <div class="ck-button">
      <label>
      <% days = ['Mon', 'Tue', 'Wen', 'Thu', 'Fri', 'Sat', 'Sun'] %>
      <% days.map do |day| %>          
      <%= ff.check_box :count,{multiple: false},day,nil %>
      <%= ff.label day %>
      <%end%>
      </label>
    </div>
  </div>
  <div class="col-md-4">
    <div class="answer">
      <%= ff.select "start_time", ["1 AM", "2 AM", "3 AM", "4 AM", "5 AM", "6 AM", "7 AM", "8 AM", "9 AM", "10 AM", "11 AM", "12 PM", "1 PM", "2 PM", "3 PM", "4 PM", "5 PM", "6 PM", "7 PM", "8 PM", "9 PM", "10 PM", "11 PM"], {:selected => (@therapist.available_times.key?(day) ? @therapist.available_times[day][:start] : '7' )} %>
    </div>
  </div>
  <div class="col-md-4">
    <div class="answer">
      <%= ff.select "end_time", ["1 AM", "2 AM", "3 AM", "4 AM", "5 AM", "6 AM", "7 AM", "8 AM", "9 AM", "10 AM", "11 AM", "12 PM", "1 PM", "2 PM", "3 PM", "4 PM", "5 PM", "6 PM", "7 PM", "8 PM", "9 PM", "10 PM", "11 PM"], {:selected => (@therapist.available_times.key?(day) ? @therapist.available_times[day][:end] : '17' )} %>
    </div>
  </div>
</div>  <% end %> 
0 голосов
/ 15 ноября 2018

Вы должны сгруппировать имена полей по чему-либо.попробуйте это:

Во-первых, используйте each_with_index, чтобы иметь некоторый индекс для их группировки:

["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"].each_with_indexx do |day, idx|

Теперь вы можете написать что-то вроде этого:

<%= ff.check_box "availabilities[#{idx}][day]", .... %>
<%= ff.select "availabilitlies[#{idx}][start_time]", .... %>
<%= ff.select "availabilitlies[#{idx}][end_time]", .... %>

Paramsбудет немного другим, вместо массива объектов у вас будет это:

availabilities => {'0' => {'day' => 'Sunday', "start_time" => .., "end_time" => ...}, '1' => {'day' => 'Monday', .... }}
...