2017-01-21 1 views
0

Ich habe Optionen für die Zeitschlitze, die ein Benutzer sollte zur Auswahl der Lage sein:Rails erstellen has_many Assoziationsmodelle aus einer Liste von Optionen

[ 
    { 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 und ein Benutzer soll Timeslot auf der Basis auswählen können Liste oben.

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

Ich möchte zwei Dinge tun: 1. Nicht-Zeitschlitze für einen Benutzer in der Datenbank Prebuild haben 2. ich die Liste ändern (hinzufügen oder entfernen) Und das würde die Optionen widerspiegeln, die dem Benutzer zur Auswahl stehen:

Antwort

0

In Bezug auf 1. ist es eine gute Idee, Zeitfenster in der Datenbank zu speichern, da es so klingt, als würden Sie Zeitfenster von Benutzern hinzufügen und entfernen.

Sie können dann eine Admin-Schnittstelle haben (gemäß Anforderung 2), um Zeitfenster hinzuzufügen und zu entfernen, die ein Benutzer auswählen kann. Sie wollen das nicht hart codieren. Wenn man es zum Modell macht und Rails alles über das Modell relatioships erzählt, vereinfacht sich das Problem, ein Formularfeld für Timeslots hinzuzufügen. Wenn Sie davon ausgehen, dass Zeitfenster ein Modell sind und die Modellbeziehungen in Ihren Modelldateien definiert sind, können Sie f.association :timeslot für Ihren Benutzer aufrufen. Einfaches Formular erzeugt automatisch ein Dropdown/Combobox der verfügbaren Zeitfenster, aus denen Sie (mehrere) Zeitfenster auswählen können.

Vielleicht möchten Sie den Beschriftungstext dieser Zeitfenster anpassen, ich bin nicht sicher, wie gut Simple Form das aus der Box handhabt.

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

+0

Danke für die Antwort. Um mehr Einsicht zu geben, sind die hartcodierten Werte eine Liste aller möglichen Werte für Zeitfenster, die erstellt werden sollen und nicht die, die in der Datenbank verfügbar sind. Mit diesen verfügbaren Werten würden Zeitfenster in der Datenbank für diesen Benutzer erstellt. –

Verwandte Themen