2016-12-10 5 views
1

Frage: Wie teile ich datetime in zwei separate Formularfelder auf?Datum in zwei separate Formularfelder teilen (RAILS)

Ich habe folgende:

<%= f.label :Borrowed, "Check Out Date*" %></td> 
<%= f.date_field :Borrowed, :id => "datepicker", min:Date.today, :ignore_time => true, :required => true %></td> 

<%= f.label :Borrowed, "Check Out Time*" %> 
<%= f.time_field :Borrowed, min:"9:00 AM", max: "4:30 PM", default:"10:00 AM", :ignore_date => true, :required => true%> 

<td><%= f.label :Returned, "Check In Date" %> 
<td><%= f.date_field :Returned, :id => "datepicker", min:Date.today, :ignore_time => true, :required => true %> 

<td><%= f.label :Returned, "Check In Time*" %> 
<td><%= f.time_field :Returned, min:"9:00 AM", max: "4:30 PM", default:"10:00 AM", :ignore_date => true, :required => true%> 

Also, ich habe zwei Datetime-Felder in der Datenbank: Borrowed und Returned. Ich wollte das Datum und die Zeit teilen, damit der Benutzer ein Datum aus einem Kalender mit einem jQuery-Skript auswählen kann. (Dies kann das Problem sein ...) Was passiert ist, wenn ich das Formular ausfülle und absende, wird die Zeit korrekt gespeichert, aber das Datum ist sowohl bei Ausleihe als auch bei Rückgabe identisch.

So in der Datenbank sieht es wie folgt aus:

Returned: 2016-12-09 15:00:00 -0800 
Borrowed: 2016-12-09 10:00:00 -0800 

jQuery

$('#datepicker').datepicker({format: 'dd/mm/yyyy'}); 

Gems

gem 'bootstrap-timepicker-rails' 
gem 'bootstrap-datepicker-rails' 

Antwort

3

Sie können nicht zwei Felder mit dem gleichen Namen wie:

<%= f.date_field :Borrowed, :id => "datepicker", min:Date.today, :ignore_time => true, :required => true %></td> 
<%= f.time_field :Borrowed, min:"9:00 AM", max: "4:30 PM", default:"10:00 AM", :ignore_date => true, :required => true%> 

Dies wird Ihnen definitiv den Wert für ein Feld geben, und der Wert für das Feld mit dem gleichen Namen wird außer Kraft gesetzt.

Was Sie möchten, können Sie die folgenden zwei Arten erreicht werden:

1) mit Spalten in der Tabelle Tinker

Sie zwei Spalten in der Tabelle kann zwei Werte zu speichern: Datum und Zeit. Rails bietet die folgenden zwei Datentypen zum Speichern von Datum und Uhrzeit.

add_column :table_name, :borrowed_date, :date # It will store day, month & year. 
add_column :table_name, :borrowed_time, :time # It will store hours, minutes & seconds. 

2) Verwenden Sie date_field_tag & time_field_tag

Statt auf form_for zu verlassen, um die Werte für uns, in diesem Szenario zu generieren, werden Sie die Verantwortung übernehmen müssen. Jetzt

<%= date_field_tag :borrowed_d # other options %> 
<%= time_field_tag :borrowed_t # other options %> 

, Rails wird nicht in Bezug auf die Existenz von Spalten beklagen: borrowed_d & borrowed_t, und gleichzeitig, es wird nicht die Werte für diese Spalten entweder speichern. Also in Ihrem Controller, jetzt müssen Sie manuell die Werte für borrowed_d und borrowed_t nehmen, kombinieren Sie sie in eins, und speichern Sie diese Sache gegen borrowed in der Datenbank.

Nicht nur das, im Falle der Bearbeitung eines Objekts, müssen Sie die beiden Werte von borrowed sammeln und im Formular anzeigen.

+0

Nach dem Hinzufügen neuer Spalten. Funktioniert gut. Vielen Dank – codingdraculasbrain

Verwandte Themen