Sehr neu in Ruby und ich habe seit Stunden festgefahren. Überall suchen und keine Antwort finden.Konvertieren String in Datum vor dem Speichern mit Rails
Also benutze ich den Bootstrap Datepicker für Schienen gem.
Da ich das Datumsformat des Datepickers geändert habe, wird es nicht in der DB gespeichert. Das liegt daran, dass die Eingabe simple_form als Zeichenfolge verwendet wird, um die von simple_form angewendeten Standardeingaben für die Datumsauswahl zu vermeiden.
Meine Frage ist: Wie kann ich eine Zeichenfolge wie "06/18/2013" zu einem Datum ändern/konvertieren, bevor es in der Datenbank gespeichert wird? Wird dies am besten vom Controller gehandhabt?
Mein Controller:
# PUT /events/1
# PUT /events/1.json
def update
@event = Event.find(params[:id])
# Ugghhhh I need help
# @event.event_date = Date.parse(params[:event_date]).to_date
respond_to do |format|
if @event.update_attributes(params[:event])
format.html { redirect_to @event, :notice => 'Event was successfully updated.' }
format.json { head :no_content }
else
format.html { render :action => "edit" }
format.json { render :json => @event.errors, :status => :unprocessable_entity }
end
end
end
DB Schema:
create_table "events", :force => true do |t|
t.string "event_name"
t.string "event_location"
t.date "event_date"
t.time "event_time"
t.text "event_content"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "user_id"
t.boolean "approved", :default => true
t.integer "category_id"
end
Dies ist der Server-Log:
Started PUT "/events/1" for 127.0.0.1 at 2013-06-14 02:37:15 -0700
Processing by EventsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"RYMdJ0lFmvG0+nVIsTtJXu5fyD/L3/WAKsk9FX6WWgo=", "event"=>{"user_id"=>"1", "category_id"=>"3", "event_name"=>"A Event Name", "event_location"=>"Event Location", "event_date"=>"06/13/2013", "event_time(1i)"=>"2000", "event_time(2i)"=>"1", "event_time(3i)"=>"1", "event_time(4i)"=>"02", "event_time(5i)"=>"18", "event_content"=>"First night"}, "commit"=>"Update Event", "id"=>"1"}
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Event Load (0.1ms) SELECT "events".* FROM "events" WHERE "events"."id" = ? LIMIT 1 [["id", "1"]]
(0.0ms) begin transaction
(0.0ms) commit transaction
Redirected to http://localhost:3000/events/1
Completed 302 Found in 4ms (ActiveRecord: 0.3ms)
Ich würde nur vorschlagen, dass Sie möglicherweise Feldnamen ändern, es ist redundant, Ereignisattribut event_name, event_location, event _... aufzurufen –
Ja, einverstanden. Danke für den Tipp. –