2017-01-21 1 views
0

я варианты временных интервалов, которые пользователь должен быть в состоянии выбрать из:Rails создавать модели HAS_MANY ассоциации из списка опций

[ 
    { 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. Не должны prebuild временных интервалов в базе данных для пользователя 2. Я могу изменить список (добавить или удалить), и это будет отражать варианты, доступные пользователю для выбора из

ответ

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

+0

Спасибо за ответ. Для более глубокого понимания жестко заданные значения представляют собой список всех возможных значений для временных интервалов, которые необходимо создать, а не те, которые доступны в базе данных. Учитывая эти доступные значения, временные интервалы будут созданы в базе данных для этого пользователя. –

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