Ruby on rails rails提交复选框,并选择匹配项

Ruby on rails rails提交复选框,并选择匹配项,ruby-on-rails,ruby,ruby-on-rails-5,erb,Ruby On Rails,Ruby,Ruby On Rails 5,Erb,我有一个表单,显示日期和时间,就像这样 它的代码如下所示: <%= f.fields_for :availabilities do |ff| %> <% ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"].each do |day| %> <div class="row"> <div class="col-md-4">

我有一个表单,显示日期和时间,就像这样

它的代码如下所示:

 <%= 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"]}
<%= ff.check_box "availabilities[#{idx}][day]", .... %>
<%= ff.select "availabilitlies[#{idx}][start_time]", .... %>
<%= ff.select "availabilitlies[#{idx}][end_time]", .... %>
我真正想要的是:

"availabilities"=>[{"start_time"=> "1 AM", "end_time"=>"1 AM", "day" => "Monday"},{"start_time"=> ...},...]
仅适用于选定的天数

从控制员方面看,我拥有如下许可:

:availabilities => [:day, :start_time, :end_time],
编辑:
我将
multiple
更改为
false
,现在我的可用性有了我想要的格式,但我只得到最后一个选中的字段,而不是所有选中字段及其关联时间的数组

您必须按某种方式对字段名进行分组。试试这个:

首先,使用带有索引的
每个\u
创建一些索引以对它们进行分组:

["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"].each_with_indexx do |day, idx|
现在你可以这样写:

 <%= 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"]}
<%= ff.check_box "availabilities[#{idx}][day]", .... %>
<%= ff.select "availabilitlies[#{idx}][start_time]", .... %>
<%= ff.select "availabilitlies[#{idx}][end_time]", .... %>
请尝试以下代码:

  <%= 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 %> 

(@climater.available_times.key?(天)?@climater.available_times[天][:开始]:'7')}%>
(@climater.available_times.key?(day)?@climater.available_times[day][:end]:'17')}%>