Rails从选项列表中创建has_many关联模型

时间:2017-01-21 06:24:57

标签: ruby-on-rails

我有用户应该可以选择的时间段选项:

[
  { day_of_week: 'Thursday', time_of_day: '7 am' },
  { day_of_week: 'Thursday', time_of_day: '8 am' },
  { day_of_week: 'Thursday', time_of_day: '9 am' },
  { day_of_week: 'Friday', time_of_day: '7 am' },
  { day_of_week: 'Friday', time_of_day: '8 am' },
  { day_of_week: 'Friday', time_of_day: '9 am' },
  { day_of_week: 'Friday', time_of_day: '10 am' },
  { day_of_week: 'Saturday', time_of_day: '8 am' },
  { day_of_week: 'Saturday', time_of_day: '9 am' },
  { day_of_week: 'Saturday', time_of_day: '10 am' }
]

User has_many :timeslots,用户应该可以根据上面的列表选择Timeslot

我当前的HTML:

   <%= simple_form_for(current_user, url: registration_path(:user)) do |f| %>
        <% @timeslots.each do |day, values| %>
          <div class="lead">
            <%= day %>
          </div>
          <%= f.simple_fields_for :timeslots, values.sort_by { |slot| slot[:time_of_day].to_i } do |ff, something| %>
            <div class="form-check">
              <label class="form-check-label">
                <%= ff.input_field :selected %>
                <%= ff.object.time_of_day %>
              </label>
            </div>
          <% end %>
        <% end %>
        <%= f.submit 'Update', class: 'btn btn-primary' %>
      <% end %>

我想做两件事: 1.不必为数据库预先为用户构建时隙 2.我可以更改列表(添加或删除),这将反映用户可供选择的选项

1 个答案:

答案 0 :(得分:0)

关于1.,最好将时隙存储在数据库中,因为它听起来像是要添加和删除用户的时隙。

然后,您可以拥有管理界面(根据要求2),添加和删除用户可以选择的时间段。你不想硬编码。将它作为模型并告诉Rails关于模型relatinoships的所有内容实际上简化了为时隙添加表单字段的问题。

假设时间段是模型,模型关系在模型文件中定义,您可以在用户上调用f.association :timeslot。简单表单自动生成可用时隙的下拉/组合框,您可以从中选择(多个)时隙。

您可能想要自定义这些时间段的标签文本,我不确定Simple Form如何处理开箱即用的内容。

<%= simple_form_for(current_user, url: registration_path(:user)) do |f| %>
        <%= f.association :timeslots %>
        <%= f.submit 'Update', class: 'btn btn-primary' %>
 <% end %>

相关问题